如何在 SAS 中重新构建(选择)数据



我有一个这样的数据集:

    DATA HAVE;
        INPUT _USUBJID $ VISITNUM $ VISIT $ ;
    CARDS;
    01/01 VISIT1 SCREENING
    01/01 VISIT1 SCREENING
    01/01 VISIT1 SCREENING
    01/01 VISIT1 RETEST
    01/01 VISIT1 RETEST
    01/01 VISIT3 BASELINE2
    01/01 VISIT3 BASELINE2
    01/01 VISIT3 RETEST
    01/01 VISIT3 RETEST
    01/02 VISIT1 SCREENING
    01/02 VISIT1 SCREENING
    01/02 VISIT3 BASELINE2
    01/02 VISIT3 BASELINE2
    ;
    RUN;

我需要将其重组为:

    DATA WANT;
        INPUT _USUBJID $ VISITNUM $ VISIT $ ;
    CARDS;
    01/01 VISIT1 RETEST
    01/01 VISIT1 RETEST
    01/01 VISIT3 RETEST
    01/01 VISIT3 RETEST
    01/02 VISIT1 SCREENING
    01/02 VISIT1 SCREENING
    01/02 VISIT3 BASELINE2
    01/02 VISIT3 BASELINE2
    ;
    RUN;

如果一个受试者同时具有筛选和重测值,我需要提取该受试者的重测值。如果受试者没有任何重新测试值,那么我只需要访问(即筛选或本例中的BASELINE2)。

我会分三个阶段进行:

  1. 将重测_usubjid、访问数对和相关值抓取到一个数据集(下面称为重测)
  2. 通过从原始对中减去重测对,然后将值重新连接回(下面称为 onetest),获取另一个数据集的无重测_usubjid、访问数对和相关值
  3. 连接重测值和不重测值。

SQL中的示例:

proc sql;
    create table retest as 
        select *
        from have 
        where VISIT="RETEST";
    create table onetest as
        select * from
            ((select distinct _usubjid, visitnum 
            from have)
            except 
            (select distinct _usubjid, visitnum
            from retest)) as onetesters
            left join 
            have on 
                onetesters._usubjid = have._usubjid and 
                onetesters.visitnum = have.visitnum;
    create table want as 
        select * from retest 
        union all
        select * from onetest;
quit;

最新更新