sql - 在 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;
不幸的是,这不起作用。
解决方案
棘手。您走在正确的轨道上,但需要检查您的 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;
推荐阅读
- ios - 有什么方法可以将视图从 swiftUI 更改为 UIKit?
- java - 如何正确显示用户的个人资料图片
- bash - 使用 getopt 解析负值的参数 - 有什么方法可以让 getopt 忽略它们?
- php - 我在循环内的查询处理时间过长
- java - 在 Spring boot 和 Angular App 的 Tomcat 上部署 WAR 文件
- c - C整数到二进制位顺序
- reactjs - 动态页面分页在反应表中不起作用
- r - R Shiny:If 中的错误 - 参数长度为 zerp
- c - C - 打印链表的头部
- apache-spark - 如何在 Pyspark 中确保多行代码的原子性?