2016-11-30 50 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;