SAS中的从宽到长数据集

时间:2018-08-22 17:17:02

标签: sas data-cleaning

我有一个数据集,该数据集具有多个度量作为多个时间点。

数据如下:

 UserID Var1_2008 Var1_2009 Var1_2010 Var2_2008 Var2_2009 Var2_2010 Race
  1      Y        N         Y         20        30        20        1
  2      N        N         N         15        30        35        0

我希望数据看起来像这样:

 Year UserID Var1 Var2 Race
 2008 1      Y    20   1
 2009 1      N    30   1
 ....

我该怎么做?我完全迷路了

2 个答案:

答案 0 :(得分:2)

假设所有var1_var2_变量的年份相同,则可以使用数组。

data want ;
  set have ;

  /* Need two arrays, as one is character, the other numeric */
  array v1{*} var1_: ; /* wildcard all 'var1_'-prefixed variables */
  array v2{*} var2_: ; /* same for var2_ */

  /* loop along v1 array */
  do i = 1 to dim(v1) ;
    /* use vname function to get variable name associated to this array element */    
    year = input(scan(vname(v1{i}),-1,'_'),8.) ;
    var1 = v1{i} ;
    var2 = v2{i} ;
    output ;
  end ;

  drop i ;
run ;

答案 1 :(得分:1)

有一个宏!我认为运行以下命令可以完全完成您想要完成的任务:

std_logic_vector