BookmarkSubscribeRSS Feed

[SAS 프로그래밍 고수 백승민] [결측치] 결측치(MISSING)를 포함한 변수 삭제하기

Started ‎06-11-2020 by
Modified ‎06-12-2020 by
Views 133

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

* 질문 올라온것을 생각해보다가 구현해보았습니다.

* 여러 형태가 있을듯 합니다. 한 STEP으로 처리해 보려했는데 쉽지않네요.;

* 배열을 이용하여서 결측치 포함된 변수를 선택후에 그 변수를 MACRO로 지정후에 DROP문에 사용하는 방법을 선택해보았습니다;

 

data BACK;
   input VAR1 VAR2 VAR3 VAR4 $ VAR5 $ VAR6 $ VAR7 $ VAR8 VAR9;
   datalines
;
1 . 3 qwe . yui aaa 1 3
. . 2   . . hjk bbb 3 2
3 . 3 zxc . ttt ccc . 1
;

 


* 문자변수와 숫자변수 각각에 대하여 MACRO변수에 지정;

 

DATA _NULL_;
   SET BACK END=FINAL;

 

   * 문자변수;
     ARRAY CTEMP(*) _CHARACTER_;

 

     * MACRO변수로 지정;
     CALL SYMPUT('CLIST',COMPRESS(DIM(CTEMP)));

 

     * 숫자변수;\
     ARRAY NTEMP(*) _NUMERIC_;

 

     * MACRO변수로 지정;
     CALL SYMPUT('NLIST',COMPRESS(DIM(NTEMP)));



RUN;

 

 

* 데이타세트가 포함하는 문자변수와 수자변수에 대하여 Macro변수 지정;

 

%put &clist;
%put
 &nlist;

 

 

DATA BACK1;     
  SET BACK END=FINAL;
     ARRAY CTEMP(*) _CHARACTER_;
     ARRAY NTEMP(*) _NUMERIC_;

 

     * RETAIN변수를 배열로 지정;
     ARRAY CSAN(&CLIST) CSAN1-CSAN&CLIST;
     ARRAY NSAN(&NLIST) NSAN1-NSAN&NLIST; 
     RETAIN CSAN1--CSAN&CLIST NSAN1--NSAN&NLIST;
     LENGTH LIST $ 50; 

 

     * 문자변수에 대한 처리;     
     DO I = 1 TO DIM(CTEMP);



         * MISSING값을 RETAIN변수로 지정;
         IF MISSING(OF CTEMP(I)) = 1 THEN CSAN(I) = MISSING(OF CTEMP(I));

 

         * LIST변수에 MISSING값 존재하는 변수를 차례로 입력;
         IF FINAL AND CSAN(I) = 1 THEN LIST=TRIM(LIST)||' '||TRIM(vname(CTEMP(i)));

 

     END;

 

     * 숫자변수에 대한 처리;
     DO I = 1 TO DIM(NTEMP);


 

         * MISSING값을 RETAIN변수로 지정;
         IF MISSING(OF NTEMP(I)) = 1 THEN NSAN(I) = MISSING(OF NTEMP(I));

 

         * LIST변수에 MISSING값 존재하는 변수를 차례로 입력;
         IF FINAL AND NSAN(I) = 1 THEN LIST=TRIM(LIST)||' '||TRIM(vname(NTEMP(i)));

 

     END;     

 

     CALL SYMPUT('MLIST',LIST);

 

     *DROP CSAN: NSAN: LIST I;

 

RUN;


* Missing을 포함하는 변수 Macro지정;

%PUT
 &MLIST=; 

 

DATA BACK2;
 SET BACK(DROP=&mlist);
RUN;

Version history
Last update:
‎06-12-2020 01:10 AM
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