使用SAS中的阵列将宽到长转置

时间:2015-12-14 13:56:16

标签: sas

我有一个SAS数据集,包含以下变量:ID,Var1_0,Var1_3,Var1_6,Var2_0,Var2_3,Var2_6,可以这样读取:Var1_0在时间0是参数1.对于每个主题,我有2个变量和3个时间点。我想使用数组将其转换为长格式,我这样做了:

data long;
    set wide;
    array a Var1_0 Var1_3 Var1_6 Var2_0 Var_3 Var_6;
    Do i=1 to dim(a);
        outcome = a[i];
        *Var = ???;
        if (mod(i,3)=1) then Time = 0;
            else if (mod(i,3)=2) then Time = 3;
                else Time = 6;
        Output;
    end;
    keep ID Outcome Time;
run;

问题在于我不知道如何计算参数变量,即我想添加1或2的变量,具体取决于与该值相关的参数。有没有更好的方法呢?谢谢!

1 个答案:

答案 0 :(得分:0)

Reeza在评论中给出了答案。这里输入了。

data long;
   set wide;
   array a[*] Var1_0 Var1_3 Var1_6 Var2_0 Var2_3 Var2_6;
   do i=1 to dim(a);
      outcome = a[i];
      var = vname(a[i]);
      time = input(scan(var,2,'_'),best.);
      /*Other stuff you want to do*/
      output;
   end;
run;

VNAME(array[sub])为您提供array [sub]引用的变量的变量名。

scan(str,i,delim)使用指定的分隔符在str中为您提供第i个单词。