procsql:如何将3列合并为1列,并创建一个额外的筛选列?

cczfrluj  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(281)

我试图将3列堆叠成一列,但是,我想保留一个filter列,以便能够区分变量,我尝试了coalesce和union all,但是我不明白如何做到这一点,因为我没有id列。
以下是表格:

41zrol4v

41zrol4v1#

您可以使用数据步方法。
我没有输入你的数据,所以这里有一个完全工作的例子,类似于你的,但不完全相同。
使用 VNAME() 获取变量名。使用数组获取值。

DATA wide; 
  input famid faminc96 faminc97 faminc98 ; 
CARDS; 
1 40000 40500 41000 
2 45000 45400 45800 
3 75000 76000 77000 
; 
RUN; 

DATA long1a;
  SET wide;
  *declare an array with the list of variables to transpose;
  ARRAY afaminc(96:98) faminc96 - faminc98 ;

  DO year = 96 to 98 ;
    faminc = afaminc(year);
    variable_name = vname(afaminc(year));
    OUTPUT;
  END;

  DROP faminc96 - faminc98 ;
RUN;

宽到长使用数据步https://stats.idre.ucla.edu/sas/modules/reshaping-data-wide-to-long-using-a-data-step/
阵列:https://stats.idre.ucla.edu/sas/seminars/sas-arrays/

相关问题