BookmarkSubscribeRSS Feed

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

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

* 출처 : 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

hackathon24-white-horiz.png

The 2025 SAS Hackathon Kicks Off on June 11!

Watch the live Hackathon Kickoff to get all the essential information about the SAS Hackathon—including how to join, how to participate, and expert tips for success.

YouTube LinkedIn

Article Labels
Article Tags