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

SAS: Coding a dummy variable for a value of a variable by group within group

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

我相信经典的 2XDOW 将是这里的关键,但这是我使用 SAS 的第三周,并且很难通过这里的两个 BY 组获得它。

我在这里参考并尝试编写了 Haikuo 代码的变体:

 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;

更改您的 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; 语句。