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;
语句。
我有一个 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;
语句。