首页 > 解决方案 > 在 SAS 中从基线创建计数

问题描述

我正在寻找从具有基线标志的条目开始创建一个“枚举”变量。如果该行具有每个主题的 BaseFlag 的“Y”条目和“参数”下的条目,则枚举仅从 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;

不幸的是,这不起作用。

标签: sqlsas

解决方案


棘手。您走在正确的轨道上,但需要检查您的 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;

在此处输入图像描述


推荐阅读