SAS,在使用proc转置时强制创建列

时间:2018-02-20 17:13:53

标签: sql sas

如果可能的话,我对SAS很新,需要一些帮助。

我的数据看起来像这样

sample data

目前,我只有201801,但我希望跟随代码能够在2018年的所有月份运行,或者更确切地说每年都会强制显示

PROC TRANSPOSE DATA = have OUT = want PREFIX = primary_;
    BY member_no;
    ID yearmonth_pd;
    VAR desc;
    OPTIONS MISSING = ' ';
RUN;

这样做的目的是,稍后我想将每年一半的连接添加到其他信息,但这会返回错误

ERROR: Column primary_201802 could not be found in the table/view identified with the
   correlation name B.

我们手动输入变量b.primary_201801,b.primary_201802,....

但希望这可以在不需要的情况下完成,因为其他部门使用代码,但不一定知道如何编码。

基本上,我想要以下内容(顶部的表格是我正在寻找的,下面的表格通常是数据)

desired outcome

全部谢谢!

1 个答案:

答案 0 :(得分:1)

您没有指出yearmonth_pd是字符串,格式化日期值,还是仅为年份和月份的编码表示yyyymm的整数。我会假设简单的整数。

您需要将一组额外行添加到have,以便每个目标列有一行。

data all_months;
  member_no = 0;
  do yearmo_pd = 201801 to 201812;
    output;
  end;
run;

data haveFull;
  set all_months have;
run;

PROC TRANSPOSE DATA = have OUT = want(where=(member_no ne 0)) PREFIX = primary_;
    BY member_no;
    ID yearmonth_pd;
    VAR desc;
    OPTIONS MISSING = ' ';
RUN;

out=具有稀疏或无序data=值时,此方法还可用于强制id表中的某个列顺序。