2016-11-30 56 views
0

我有一个数据集,其变量代表两种信息:变量测量和类别。SAS:跨类别浓缩单独的测量变量

例如,Var1A测量类别A(例如男性/女性)的第一变量(例如血压),而Var2B测量类别B(例如男性/女性)的第二变量(例如心率) 。

Key Var1A Var2A Var1B Var2B 
--- ----- ----- ----- ----- 
002 1  2  3  4 
031 5  6  7  8 
028 9  10 11 12 

我需要每个测量变量在类别类型中进行浓缩。

Key Type Var1 Var2 
--- ---- ---- ---- 
002 A 1 2 
002 B 3 4 
028 A 9 10 
028 B 11 12 
031 A 5 6 
031 B 7 8 

精简数据集的排序对我来说并不重要。


我已经拿出了作品,并产生了上面看到的数据集。我基本上蛮横的强迫/摆弄我的方式来解决这个问题。但是,我想知道是否有一种更直接/直观的方式来做到这一点,可能不需要先排序并放弃这么多变量。

data have; 
    input key $ @@ Var1A Var2A Var1B Var2B; 

    datalines; 
    002 1 2 3 4 
    031 5 6 7 8 
    028 9 10 11 12 
    ; 
run; 

proc sort data = have out = step1_sort; 
    by key; 
run; 

proc transpose data = step1_sort out = step2_transpose; 
    by key; 
run; 

data step3_assign_type_and_variable (drop = _NAME_); 
    set step2_transpose ; 

    if  _NAME_ = 'Var1A' then do; 
     variable = 'Var1'; 
     type = 'A'; 
    end; 
    else if _NAME_ = 'Var1B' then do; 
     variable = 'Var1'; 
     type = 'B'; 
    end; 
    else if _NAME_ = 'Var2A' then do; 
     variable = 'Var2'; 
     type = 'A'; 
    end; 
    else if _NAME_ = 'Var2B' then do; 
     variable = 'Var2'; 
     type = 'B'; 
    end; 
run; 

proc transpose data = step3_assign_type_and_variable 
       out = step4_get_want (drop = _NAME_); 
    var col1; 
    by key type; 
    id variable; 
run; 

回答

0

我想出了用同样的方法,除了用清洁剂子更换您的蛮力:

** use this step to replace your brute force code **; 
data step3_assign_type_and_variable; set step2_transpose; 
    type = upcase(substr(_name_,length(_name_),1)); 
    variable = propcase(substr(_name_,1,4)); 
    drop _name_; 
run;