2016-10-05 3 views
0

SAS에 PROC SQL 쿼리를 작성하여 특정 문자 (예 : RF *)로 시작하는 최대 열 수를 결정하려고합니다. 기존의 proc은 내가 이렇게 간다는 것을 의미합니다.proc sql 문을 사용하여 여러 열의 최대 개수를 찾습니다.

proc means data = input_table nway noprint missing; 
    var age x y z RF: ST: ; 
    class a b c; 
    output out = output_table (drop = _type_ _freq_) max=; 
run; 

여기에서 RF 열은 RF로 시작하고 ST와 마찬가지로 모든 열을 나타냅니다. PROC SQL에 비슷한 것이 있는지 궁금합니다. 사용할 수 있습니까?

감사합니다.

+0

) 만 사용하여 하나의 proc SQL 호출에서 모든 작업을 수행 할 수 있다는 것입니다. 동적 SQL을 사용해야 할 수도 있습니다. 이에 대한 글이 여기에 있습니다. http://support.sas.com/resources/papers/proceedings12/070-2012.pdf – Nicarus

+0

이 문장은 매크로의 일부이며, 여러 번 실행하므로 동적입니다. SQL은 그것을 더욱 복잡하게 만들 수 있습니다. 이것 이외의 다른 방법이 있습니까? –

+0

PROC SQL에서이 작업을 수행하는 유일한 방법은 데이터를 표준화 ("unpivot")하여 열이 이제 행에 있도록하는 것입니다. 데이터 집합 형식에 따라 가능하지 않을 수도 있습니다. – Nicarus

답변

1

SQL을 사용해야하는 경우 동적 SQL이 실제로이 방법입니다. 좋은 소식은 하나의 매크로 변수 (예 :

proc sql noprint; 
    select catx(' ','max(',name,') as',name) into :MAX_LIST separated by ',' 
    from dictionary.columns 
    where libname = 'SASHELP' 
    and memname = 'CLASS' 
    and type = 'num' 
    /*eq: is not available in proc sql in my version of SAS, but we can use substr to match partial variable names*/ 
    and upcase(substr(name,1,1)) in ('A','W') /*Match all numeric vars that have names starting with A or W*/ 
    ; 
    create table want as select SEX, &MAX_LIST 
    from sashelp.class 
    group by SEX; 
quit; 
+0

감사! 도움이됩니다! –

관련 문제