2014-02-14 2 views
3

의 열의 평균 값을 찾는 방법의 말을하자나는 SAS 데이터 세트가 SAS

No d1 d2 d3 ... dn 
1 2 3 4 ... n1 
2 3 4 5 ... n2 
3 4 5 6 ... n3 

는 지금 SAS의 모든 컬럼의 평균을 찾아야합니다. 할 방법이 있습니까?

열 수는 구체적이지 않습니다. 내가 d1의 평균이 필요한 경우 - dn 열을, 나는 기대하는 출력은 다음과 같습니다 데이터 단계 또는 PROC의 SQL 또는 PROC의 IML을 사용하여이 중 하나를 할 수있는 방법은

3 4 5 .. (n1+n2+n3)/3 

있습니까?

답변

4

를 예를 들어 PROC 수단을 사용할 수 있습니다. 여기서 PROC SUMMARY를 사용했습니다. PROC MEANS와 NOPRINT 옵션이 동일합니다. 분명히 @pteranodon에서 대답의 아주 사소한 변경입니다

proc summary data=have nway; 
var d: ; 
output out=want (drop=_:) mean=; 
run; 
2

예, 데이터 단계에서 다음과 같이 입력하십시오 : mean(OF d1-d100). 함수 내에 of을 적어 둡니다. 이 평균 d1, d2, d3, ..., d100 열을 계산한다고 말하는 상징적 인 참조입니다.

+0

나는 OP가 각 관측 내의 열의 의미가 아닌 관측을 가로 지르는 열을 원한다고 생각합니다. 샘플 데이터는 동일한 결과를 제공합니다. – pteranodon

5

proc means은 열 단위 통계를 계산하는 방법입니다.

data have; 
    input No d1 d2 d3 d4; 
datalines; 
1 2 8 60 80 
2 3 12 50 70 
3 4 10 40 60 
; 
run; 

proc means data=have noprint nway; 
    var d1-d4; 
    output 
    out=want(drop=_TYPE_ _FREQ_) 
    mean=; 
run; 

drop = 절은 필요하지 않은 경우 유형 및 빈도에 대한 자동 변수를 제외합니다.

1

그런 다음 모두 선택 대장 와일드 카드 연산자를 사용할 수 있습니다, 모든 필요한 변수가 D로 시작하는 가정,

PROC MEANS DATA = indata; 
VAR d1-dn; 
OUTPUT=outdata MEAN=m1-mn; 
RUN; 
+0

n의 값을 알지 못하고 계속 변경되면 어떻게됩니까? – user3311403

+0

봉투 뒷면에서 PROC CONTENTS를 사용하여 변수 이름으로 데이터 집합을 출력 한 다음 CALL SYMPUT (http://www2.sas.com/proceedings/forum2007/050-2007.pdf)을 사용하여 매크로를 생성합니다. 내 모든 d1 - dn 변수. 먼저 데이터를 트랜스 포즈해야 할 수도 있습니다 ... 이중 체크를해야합니다. 어쨌든, 더 좋은 방법이 있을지도 모르겠다. 그러나 나는 단지 1-2 분 동안 그것에 대해 생각하고 싶었고 그것을 다루기위한 최선의 방법을 찾고 있지 않았다. 단지 간단하고 효과가있는 것, PROC를 외면했다. CONTENTS 및 CALL SYMPUT을 사용하여 매크로 변수를 작성하는 것이 나의 접근 방법입니다. – evanv