2017-04-19 2 views
1

클래스 변수 내에서 by-variable의 간단한 횟수를 계산하지만 클래스 변수에서 전체 개수의 이름을 바꿀 수있는 방법을 찾을 수 없습니다. 현재 출력 데이터 세트에는 각 그룹 내의 모든 cluster2에 대한 카운트와 모든 그룹에 걸친 총 카운트 (즉, 사용 된 클래스 변수)가 포함됩니다. 그러나 클래스 내의 개수는 이름이 지정되고 합계는 빈 문자열로 표시됩니다.Proc Means에서 클래스 변수의 전체 개수를 바꾸는 방법

코드 :

cluster2 group label2 count 
7     area 1 20 
7   sa  area 1 15 
7   sb  area 1 5 
15     area 15 42 
15   sa  area 15 18 
.... 

물론, emtpy 문자열의 이름을 변경하는 것은 "총은"별도의 datastep으로 수행하지만, 수 나는 그것을 할 싶습니다하기 : 출력 파일의

proc means data=seeds noprint; 
    class group; 
    by cluster2; 
    id label2; 
    output out=seeds_counts (drop= _type_ _freq_) n(id)=count; 
run; 

예 Proc Means-step에서 직접적으로. 간단하고 사소한 것이어야하지만 지금까지 방법을 찾지 못했습니다. 이후, emtpy 문자열을 변경하거나 proc transpose에서 삭제해야 함을 의미하는 데이터 세트를 조 변경하고 싶습니다.

+0

요약 테이블로 총계를 사용하려면 대신 PROC TABULATE를 사용하고 PROC MEANS는 사용하지 마십시오. – Reeza

+0

@Reeza 같은 테이블에있는 개별 그룹의 총계와 개수 모두를 나중에 조판하기를 원합니다 (피벗 테이블과 같은 결과를 얻습니다). Proc Tabulate를 사용하여이 작업을 수행 할 수 있습니까? 나는 그 절차에 익숙하지 않다. – fileunderwater

+1

이것은 정확히 PROC TABULATE가 설계 한 것입니다. 나는 종이를 추천하지만 좋은 종이는 찾을 수 없다. 여기에 많이 있지만, http://lexjansen.com/search/searchresults.php?q = proc % 20tabulate – Reeza

답변

0

직접 할 방법은 모르겠지만 속임수를 쓸 수 있습니다. 누락되지 않고 "합계"를 표시하도록 SAS에 지시 할 수 있습니다.

proc format; 
    value $MissTotalF 
    ' ' = 'Total' 
    other = [$CHAR12.]; 
quit; 

proc means data=sashelp.class noprint; 
    class sex; 
    id age; 
    output out=sex_counts (drop= _type_ _freq_) n(age)=count; 
    format sex $MissTotalF.; 
run; 

예를 들면. 이 경우 실제로 많은 차이를 만들지는 않겠지 만, 단지 카운트를하려고한다면 PROC MEANS 대신 PROC TABULATE을 사용하는 것이 좋습니다.

+0

별도의 단계없이이 문제를 처리 할 방법이 없습니까? 그런 사소한 일에 대해 별도의 단계를 추가하는 것은 너무 서투른 것처럼 보인다. Proc Tabulate로 그룹 및 합계를보다 잘 표시 할 수 있습니까? – fileunderwater

1

class 문에서 변수가 숫자 인 경우 결과 열은 숫자이므로 총계를 추가 할 수 없습니다 (@Joe의 답과 비슷한 형식을 사용하지 않는 한)). class 변수가 숫자 또는 문자 일 수 있으므로 값이 누락 된 이유입니다.

다음은 숫자 클래스 변수의 예입니다. 거의 당신이 그것을 할 방법 결과를 표시 할 수 있습니다 proc tabulate를 사용

proc sort data=sashelp.class out=class; 
by sex; 
run; 

proc means data=class noprint; 
class age; 
by sex; 
output out=class_counts (drop= _:) n=count; 
run; 

그러나 출력 데이터 세트는 동일한 누락 된 값을 가질 것이다, 그래서 정말 도움이되지 않습니다. 몇 가지 예가 있습니다.

proc tabulate data=class out=class_tabulate1 (drop=_:); 
class sex age; 
table sex*(age all='Total'),n=''; 
run; 

proc tabulate data=class out=class_tabulate2 (drop=_:); 
class sex age; 
table sex,age*n='' all='Total'; 
run; 

나는 최종 목표를 달성하기 위해 최선의 선택이, 부분합을 제거 한 후 데이터를 트랜스 마지막으로 각을 합산하여 총 열을 생성하는 데이터 단계를 쓸 것이다, proc meansnway 옵션을 추가하는 것입니다 생각 열. 3 단계이지만 코딩은 많이 필요하지 않습니다.

+0

+ 내가 알지 못하는 "drop = _ :"와일드 카드에 대해서만. – fileunderwater

0

총계와 세부 사항을 별도로 처리 할 수 ​​있도록 _TYPE_ 변수를 활용하여 사용할 수있는 한 가지 방법이 있습니다. 누락 된 값 (전체 요약 레코드와 별도)이있는 클래스가 있으면 PROC TRANSPOSE에 여전히 문제가 있습니다.

proc means data=sashelp.class noprint; 
    class sex; 
    id age; 
    output out=sex_counts (drop= _freq_) n(age)=count; 
run; 
proc transpose data=sex_counts out=transpose prefix=count_ ; 
    where _type_=1 ; 
    id sex ; 
    var count; 
run; 
data transpose ; 
merge transpose sex_counts(where=(_type_=0) keep=_type_ count); 
rename count=count_Total; 
drop _type_; 
run; 
+0

트랜스 포즈 대신 STACKODS 옵션을보십시오. – Reeza

관련 문제