0

我有一个 CASE_ID(xy 和 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;
4

1 回答 1

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 first.date then dummyvar=0;在现有的 IF 语句之前添加语句。

于 2016-08-16T16:15:07.107 回答