SAS - 如何过滤数据?

时间:2014-01-15 13:45:02

标签: sas

我是SAS的新手,如果你能解决这个问题,我将不胜感激。我有以下数据描述属于一个组和一个子组的两个人之间的关系:

Group ID | SubG ID | Ind1 ID | Rel 1 | Ind2 ID | Rel 2 |
        2        28         3       F         2       B
        2        28         2       F         1       B
        2        28         2       B        51       0
        2        29         1       R        42       0
        2        29         1       F        68       0
        3        30         1       F         2       L
        4        31         1       B         2       F
        4        31         1       F        44       0

我想获得一个数据库,其中包含属于相同组ID和相同SubG ID的所有个体(Ind1和Ind2),并且只有一个关系= F,可以是Ind1 ID或Ind2 ID。我期望的数据库看起来像:

Group ID | SubG ID | Ind | 
        2        28     3
        3        30     1
        4        31     2

有什么建议吗?

谢谢! 曼努埃尔

1 个答案:

答案 0 :(得分:1)

我首先将初始数据集转换为“长”形式,以便每行只有一个人。然后很容易选择那些在子组中只有关系F的那些:

data have;
    input GroupID SubGID Ind1ID Rel1 $ Ind2ID Rel2 $;
    datalines;
2 28 3 F 2 B
2 28 2 F 1 B
2 28 2 B 51 0
2 29 1 R 42 0
2 29 1 F 68 0
3 30 1 F 2 L
4 31 1 B 2 F
4 31 1 F 44 0
;
run;

data long;
    set have;
    IndID=Ind1ID;
    Rel=Rel1;
    output;
    IndID=Ind2ID;
    Rel=Rel2;
    output;
    drop Ind1ID Ind2ID Rel1 Rel2;
run;

proc sort data=long nodupkey; by GroupID SubGID IndID Rel; run;

data want;
    set long;
    by GroupID SubGID IndID;
    if FIRST.IndID and LAST.IndID and Rel='F';
    drop Rel;
run;