sql - 在 SAS 中根据基线创建计数

标签 sql sas

我希望从具有基线标志的条目开始创建一个“枚举”变量。如果该行的每个主题的 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;

enter image description here

关于sql - 在 SAS 中根据基线创建计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60160488/

相关文章:

sas - 这是SAS中添加注释文本的第四种方法吗?

linux - 使用 SAS 导入压缩的 dta 文件

如果您已经熟悉 R,则学习 SAS 的资源

SAS 过程 SQL : How to clear cache between testing

sql - 如何解决错误180-322 : Statement is not valid or is used out of proper order in SAS without restarting?

MySQL 显示实际事件

MySQL - 使用 IN 子句从 LEFT JOIN 结果检查多个值

sql - 如何比较/验证 sql 模式

sql - 我需要某种条件连接

mysql - 我应该引用字段 ID 还是将实际数据放在同一行中?