SAS:在组内按组编码变量值的虚拟变量

时间:2016-08-16 15:54:12

标签: group-by sas dummy-variable

我有一个CASE_ID(x y和z)的数据集,每个CASE_ID的一组多个日期(包括重复日期)和一个变量VAR。我想在一个组内按组创建一个虚拟变量DUMMYVAR,如果VAR =" C"对于某个特定日期的CASE_ID x,然后对于与该日期相对应的CASE_ID x的所有观察,DUMMYVAR = 1。

我相信Classic 2XDOW将成为关键,但这是我使用SAS的第三周,并且难以通过两个BY组来获得这个。

我参考并尝试在此处编写海科代码的变体:

 PROC SORT have;
         by CASE_ID DATE;
    RUN;

    data want;
    do until (last.DATE);
      set HAVE;
       by date notsorted; 
       if var='c' then DUMMYVAR=1; 

    do until (last.DATE);
      set HAVE;
       by DATE notsorted;

       if DATE=1 then ????????

    end;
    run;

1 个答案:

答案 0 :(得分:0)

更改您的BY语句以匹配您正在执行的分组。在第二个循环中添加一个简单的OUTPUT;语句。然后,您的新数据集将包含原始数据集中的所有行和新变量DUMMYVAR。

data want;
  do until (last.DATE);
    set HAVE;
    by case_id date; 
    if var='c' then DUMMYVAR=1; 
  end;
  do until (last.DATE);
   set HAVE;
    by case_id date; 
    output;
  end;
run;

这将创建值为1或缺失的变量DUMMYVAR。如果您希望值为1或0,则可以在第一个DO循环之前将其设置为0。或者在现有的IF语句之前添加if first.date then dummyvar=0;语句。