BookmarkSubscribeRSS Feed

[함수] 변수 리스트에서 결측치를 제외한 첫번째와 마지막 값 반환

Started ‎06-11-2020 by
Modified ‎06-11-2020 by
Views 66

* 출처 : http://cafe.daum.net/statsas/3F8j/255

 

* 질문 : http://cafe.daum.net/statsas/B3m/14612

 

data temp;

infile cards missover dlm=',' dsd;

input id var1 $ var2 $ var3 $ var4 $ var5 $;

cards;

1 , Y , N , N , N , N

2,,N,,Y,

3,Y,,,Y,

4,,,N,,

;

run;

 

* 방법1 : 배열을 사용하여 처리(해현용 님);

 

data temp1;

 set temp;

     array v[5] var1-var5;

     do i=1 to 5;

        first=v[i];

        if first ne "" then leave;

     end;

     do j=5 to 1 by -1;

        last=v[j];

        if last ne "" then leave;

     end;

     if i=j then last="";

     keep id first last;

run;

 

* 방법2 : SUBSTR 함수 사용하여 처리;

 

DATA BACK;

 SET TEMP;

     VAR = CATS(OF VAR1-VAR5);

     FIRST = SUBSTR(VAR,1,1);

     LAST  = IFC(LENGTH(VAR)=1,'',SUBSTRN(VAR,LENGTH(VAR),1));

RUN;

 

* 방법3 : 함수와 배열 처리; 

* COALESCEC : 문자인수 리스트에서 첫번째 non-missing값을 반환;

* CHOOSEC   : 인수 리스트에서 선택된 문자값을 반환;

* WHICHC    : 인수 리스트에서 지정한 위치의 값을 반환;

DATA BACK;

 SET TEMP;

     LENGTH VAR11 VAR21 VAR12 VAR22 $1.;

     ARRAY FIR_ARY (*) VAR1-VAR5;

     ARRAY LAT_ARY (*) VAR5-VAR1;

     VAR11 = COALESCEC('',OF FIR_ARY[*]);

     VAR21 = COALESCEC('',OF LAT_ARY[*]);

     VAR12 = CHOOSEC(WHICHC(VAR11,OF FIR_ARY[*]),OF FIR_ARY[*]);

     VAR22 = CHOOSEC(WHICHC(VAR21,OF LAT_ARY[*]),OF LAT_ARY[*]);

RUN;

 

* 참고 함수 : http://statwith.pe.kr/SAS/1.FUNCTION/F_list.htm 

WHICHC

CHOOSEC

SORTC

SORTN

* 수치형;

PCTL Function

LARGEST

ORDINAL Function

SMALLEST Function

 ; 

Version history
Last update:
‎06-11-2020 10:25 PM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

Article Labels
Article Tags