首页 > 解决方案 > PROC SQL:如何将 3 列合并为 1,并创建一个额外的过滤列?

问题描述

我正在尝试将 3 列堆叠为一列,但是,我想保留一个过滤列以便能够区分变量,我已经尝试使用 Coalesce 和 Union all,但我不明白该怎么做,假设我没有 ID 列。

这里的表格: 在此处输入图像描述

标签: sqlsasstackmultiple-columnsproc

解决方案


您可以使用数据步骤方法。

我没有输入您的数据,所以这是一个与您的相似但不完全相同的完整示例。

用于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/


推荐阅读