2016-08-11 2 views
0

SAS Proc SQL을 사용하여 모든 열에 누락되지 않은 값이있는 테이블에서 행을 찾고 싶습니다. 모든 열 이름을 나열하지 않고이 작업을 수행 할 수있는 방법이 있습니까? 이것은 효과가 없지만 의도 한 결과가 무엇인지 알 수 있습니다.SAS Proc SQL을 사용하여 모든 열이 누락되지 않는 행을 찾으십시오.

Proc SQL; 
    Select * 
    from work.table 
    Where * is not null; 
Run; 

가능한 경우 결과를 한 가지 관찰로 제한하고 싶습니다. 감사.

답변

0

. 데이터에서 이것은 매우 사소한 것입니다. 문자 나 숫자 변수가없는 경우

data class; 
    set sashelp.class; 
    if mod(_n_,3)=1 then call missing(age); 
run; 

data want; 
    set class; 
    if cmiss(of _all_)=0; 
run; 

cmiss는 1을 나타낸다 (이 경우에서 missing의 총 수를 계산 구체적으로). 데이터 단계에서 obs=1 옵션을 사용하여 제한 할 수 있습니다.

+0

이 일! 고맙습니다. 장래에 조의 코드를 사용하고자하는 사람을위한 레코드의 경우 누락되지 않은 값이 모두있는 행을 가져 오기 위해 if 대신 cmiss (_all_)를 0 대신 1로 변경하십시오. –

+0

왜 1로 변경합니까? 그러면 누락 된 가치가있는 행을 찾습니다. 모든 오류는 0이 될 것입니다. – Joe

+0

맞습니다. 원래 cmiss = 0은 아무런 결과도 반환하지 않았지만 모든 행에 누락 값이있는 원래 테이블에 열이 있기 때문에 이제는 깨달았습니다. 해당 열을 제거하면 예 cmiss = 0이 맞습니다. 감사. –

0

SQL에서는 명시 적이어야합니다. *은 열을 확장하는 범용 매크로가 아닙니다. select *count(*)에서 사용되는 구문 요소입니다.

그래서,이 같은 :

매크로 언어를 사용하지 않고 하나 개의 항목에있는 모든 변수를 얻을 수 없기 때문에 SQL의 단순하지 않은
Proc SQL; 
    Select * 
    from work.table 
    Where col1 is not null and col2 is not null and col3 is not null . . . 
Run; 
1

사용하여 SQL 및 사전 테이블 :

proc sql noprint; 
    select cats('not missing(', name, ')') 
    into :expression separated by " and " 
    from dictionary.columns 
    where libname = "SASHELP" and memname = "CLASS"; 
quit; 

proc sql outobs=1; 
    select * 
    from sashelp.class 
    where &expression.; 
quit;