아래 조건에 따라 WHLDR 변수를 새로 만들어야합니다. 나는 마지막 것이 맞다면 확실하지 않다. 따라서 rel> 0이고 ref_1 = 1 인 경우 multi> 1이고 ref_1 = 0이면 whldr = 0이 아닌 경우이 조건을 충족하는 첫 번째 ID는 whldr = 1이고 계속됩니다. 아래 코드와 샘플 데이터입니다. 여기 첫 번째 함수 사용
data temp_all;
merge temp_1 (in=inA)
temp_2 (in=inB)
temp_3 (in=inC)
;
by id;
firstid=first.id;
if multi = 1 then do;
if rel = 0 then whldr=1;
else whldr = 0;
end;
else if multi > 1 and ref_1 >= 1 then do;
if rel =0 and ref_1=1 then whldr=1;
else whldr = 0;
end;
else if multi > 1 and ref_1 = 0 then do;
if rel =0 and ref_1=1 then do;
if rel =0 and ref_0 ne '0' then do;
if first.id=1 then whldr=1 ;
else whldr=0;
end;
end;
end;
run;
샘플 데이터입니다 :
data have ;
input id a rel b multi ;
cards;
105 . 0 0 1
110 1 0 1 1
110 0 1 1 1
110 . 2 1 1
113 1 0 1 1
113 2 1 1 1
113 0 2 1 1
113 0 2 1 1
135 1 0 1 1
135 0 1 1 1
176 1 0 1 1
176 0 1 1 1
189 1 0 1 1
189 2 1 1 1
189 0 4 1 1
189 0 4 1 1
;
원하는 것을 더 자세히 설명해야합니다. 예를 들어 어떻게 사람을 정의하고 있습니까? 전체 데이터 세트에서 첫 번째 사람을 원하십니까? 또는 상태와 같은 다른 그룹화 변수 내에서? 입력 예제 및 결과 데이터를 게시하면 원하는 것을 명확히하는 데 도움이됩니다. – Tom
그게 내 코드예요. 그 사람들은 whldr이고, 마지막 조건을 만족하는 전체 데이터 세트의 첫 번째 사람을 원합니다. 나는 사람 수준의 데이터를 가지고 있으며 그 조건을 충족시키는 첫 번째 사람 (B)을 얻으려고하고 있으며 결과는 가계 데이터 집합이 될 것입니다. – user601828
복잡한 if/then 구조를 평가하여 원하는 정보가 없어도 정확한지 확인할 수 없습니다. 그러나 만약 당신이 관찰하고자하는 것을 표시했다면, 아마도 여러분은 하나의 관찰 결과 데이터 셋을 얻을 수 있도록'output;'과'stop; '문장을 추가 할 필요가있을 것입니다. – Tom