我希望从具有基线标志的条目开始创建一个“枚举”变量。如果该行的每个主题的 BaseFlag 都有“Y”条目并且“Parameter”下有条目,则枚举仅从 0 开始计数。
这是数据:
Subject Parameter Visit BaseFlag
001 Param1 1
001 Param1 2 Y
001 Param1 3
001 Param1 4
002 Param1 1 Y
002 Param1 2
002 Param1 3
002 Param2 1 Y
002 Param2 2
我想要以下内容:
Subject Parameter Visit BaseFlag Count
001 Param1 1
001 Param1 2 Y 0
001 Param1 3 1
001 Param1 4 2
002 Param1 1 Y 0
002 Param1 2 1
002 Param1 3 2
002 Param2 1 Y 0
002 Param2 2 1
尝试:
proc sort data = data;
by subject visit param;
run;
data want;
set have;
by subject visit param;
retain count;
if baseflag = 'Y' then count = 0;
if first.subject then count + 1;
run;
不幸的是,这不起作用。
最佳答案
棘手。您的方向是正确的,但需要检查您的 BY 语句。实际上,在这种情况下,VISIT 从属于 PARAM。
这是一个示例。
data have;
subject='001'; param='Param1'; Visit=1; BaseFlag=' '; output;
subject='001'; param='Param1'; Visit=2; BaseFlag='Y'; output;
subject='001'; param='Param1'; Visit=3; BaseFlag=' '; output;
subject='001'; param='Param1'; Visit=4; BaseFlag=' '; output;
subject='002'; param='Param1'; Visit=1; BaseFlag='Y'; output;
subject='002'; param='Param1'; Visit=2; BaseFlag=' '; output;
subject='002'; param='Param1'; Visit=3; BaseFlag=' '; output;
subject='002'; param='Param2'; Visit=1; BaseFlag='Y'; output;
subject='002'; param='Param2'; Visit=2; BaseFlag=' '; output;
run;
proc sort data = have;
by subject param visit;
run;
data want;
set have;
by subject param visit;
retain count .;
if first.param then count=.;
if baseflag = 'Y' then count = 0;
else if count ne . then count + 1;
run;
关于sql - 在 SAS 中根据基线创建计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60160488/