Search code examples
variablessaslabelresponse

How to add response option labels in SAS data set from an excel file


I have a SAS data set which just has the variable names for each variable: enter image description here

Separately, I have two CSV files - one that contains the variable label (file is in 'long format'): enter image description here

and one that contains the response option labels (also in 'long format'): enter image description here

I would like to apply the variable labels and response option labels to my SAS data set. I imagine uploading my CSV files to SAS, to make data sets, but then after that, I am not sure how to proceed. It seems that Proc datasets may be an option, but I have not been able to find an example that I could figure out to apply to my scenario. Any help - as always - is much appreciated.

Best, Camilla


Solution

  • See if you can use this as a template. I can only see educatio in your response option labels, but do the same format trick for the variables of interest.

    Feel free to ask.

    /* Sample data */
    data have;
    input gender s_5 p_gender s_6 p_age rellengt educatio;
    infile datalines dlm = ',';
    datalines;
    1, , 1, , 66, 25, 4 
    0, , 1, , 78, 46, 6 
    1, , 0, , 72, 50, 4 
    ;
    
    data val_labels;
    input var $ 1-8 label $ 10 - 74;
    infile datalines missover;
    datalines; 
    gender   Hvad er dit køn:                                                
    s_5      Hvad er dit køn: - Andet                                        
    p_gender Er du i et fast parforhold med en mand eller en kvinde?         
    s_6      Er du i et fast parforhold med en mand eller en kvinde? - Andet 
    p_age    Hvad er din partners alder (i år)?                              
    rellengt Hvor længe har du og din partner været sammen?                  
    educatio Hvad er dit højest fuldførte uddannelsesniveau?                 
    ;
    
    data res_labels;
    input var $ 1-8 value 10 label $ 12 - 63;
    infile datalines missover;
    datalines; 
    educatio 1 Grundskode til og med 6. klasse                   
    educatio 2 Grundskole 7-10. klasse / forberedende uddannelse 
    educatio 3 Gymnasiel uddannelse                              
    educatio 4 Erhvervsfaglig uddannelse                         
    educatio 5 Kort videregående uddannelse                      
    educatio 6 Mellemlang videregående uddannelse                
    educatio 7 Lang videregående uddannelse                      
    educatio 8 Ph.D / Forskeruddannelse                          
    ;
    
    /* Variable Labels */
    proc sql noprint;
       select compbl(cats(var, '=', quote(label)))
       into :label separeted by ' '
       from val_labels
       ;
    quit;
    
    proc datasets lib = work nolist;
       modify have;
          label &label.;
    quit;
    
    proc contents data = have;
    run;
    
    /* response format */
    data fmt;
       set res_labels(rename=(value=start label=label)) end=eof;
       retain fmtname "edufmt" type "n";
       output;
       if eof then do;
          start=""; Label="";
          HLO="O"; output;
       end;
    run;
    
    proc format library = work cntlin = fmt;
    run;
    
    data want;
       set have;
       format educatio edufmt.;
    run;
    
    proc print data = want;
    run;