我想知道是否可以对尚未合并到当前数据集的数据集执行条件子句?
“如果主题在DEMOG中没有丢失的SUBJNO,并且在DOSEADM和SUBJNO中至少有一个非缺失的RANDSEQ不包含在SFL中,则RAND = 1。”
以上是必需的。
为清楚起见,数据集是DEMOG,DOSEADM和SFL。 SFL是筛选失败数据集,因此它仅包含未通过筛选的受试者。 DEMOG是一个人口统计数据集,仅包括通过筛选的科目。 DOSEADM是一个剂量管理数据集。
在OOP伪代码中,它可能类似于以下内容。
如果^缺失(DEMOG.subjno)和nmiss(DOSEADM.randseq)> = 1并且(SFL.SUBJNO)中的SUBJNO ^则标记。
是否可以在SAS中完成类似的操作?或者可以在SAS中用SQL做类似的事情吗?
答案 0 :(得分:1)
我想我理解你正确的第二个条件,但请澄清我是否错了。
您可以使用proc sql中的子查询来执行此操作。每个子查询必须只返回一列数据,然后使用case子句,你可以测试你的SUBJNO是否在每个条件中,如果为全,则返回1,否则返回0。
proc sql noprint;
create table table_new as
select *, case
when SUBJNO in (select distinct SUBJNO from DEMOG where SUBJNO ne .) /*this finds where subjno not missing in DEMOG table*/
and SUBJNO not in (select distinct SUBJNO from SFL) /*this finds where subjno not in SFL table*/
and SUBJNO in (select distinct SUBJNO from DOSEADM where RANDSEQ = . group by SUBJNO having count(SUBJNO) > 1) /*This finds the subjno having >1 missing randseq observations*/ then 1
else 0
end as RAND
from table_old
;
quit;
答案 1 :(得分:1)
我会为数据集中的主题创建格式。例如,您可以使用DEMOG:
data for_fmt; *create a dataset for formats, name it something relevant to you;
set dmog;
start=subjno;
label='1';
fmtname='DEMOG'; *include $ in front if subjno is a character variable;
output;
if _n_ = 1 then do;
hlo='o';
start=.; *or ' ' if char;
label='0';
output;
run;
proc format cntlin=for_fmt; *load to formats library;
quit;
data want;
set have;
if put(subjno,DEMOG.)='1' then output; *keep only DEMOG subjects;
run;
您可以对每个数据集执行此操作(DOSEADM条件似乎也很容易在此处实现),然后使用这三种格式。