是否可以从数据集中提取数据而不将其合并到另一个数据集中?

时间:2013-11-06 08:36:56

标签: sql sas

我想知道是否可以对尚未合并到当前数据集的数据集执行条件子句?

“如果主题在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做类似的事情吗?

2 个答案:

答案 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条件似乎也很容易在此处实现),然后使用这三种格式。