2014-01-15 2 views
0

Я новичок в 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 

Я хотел бы получить базу данных, содержащую все лица (ind1 и ind2), которые принадлежат к той же группе ID и тот же SubG ID и который имеет только одно отношение = F, либо как идентификатор Ind1, либо идентификатор Ind2. База данных, которую я ожидаю, выглядит следующим образом:

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

Любые предложения?

Спасибо! Manuel

+0

Непонятно, что вы просите здесь. В каждой записи столбцы идентификатора группы и подзаголовка соответствуют индексам Ind1, Ind2 или и тому и другому? Что вы подразумеваете под «всеми лицами, которые принадлежат к одному идентификатору группы и идентификатору SubG? Кроме того, в вашем примере выводится 3 человека из 3 разных групп и подгрупп, что, как представляется, противоречит этому требованию. – user667489

+0

Вы еще что-нибудь пробовали? Вы должны приложить усилия и опубликовать код, который вы попробовали, чтобы мы могли привести вас к соответствующему ответу. – Joe

ответ

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; 
+0

Спасибо! Создание «длинной» базы данных из оригинала решило проблему! – user3198172

Смежные вопросы