2017-05-04 6 views
0

관측치가 학생 인 데이터 세트가 있고 테스트 점수에 대한 변수가 있습니다. 나는이 같은이 점수를 표준화해야합니다SAS의 데이터 저장에서 변수의 평균 및 표준 편차를 계산하십시오.

newscore = (oldscore - 모든 점수의 평균)

그래서 모든 점수의/표준을 나는 내가 가진 새로운 데이터 세트를 creat에 데이터 단계를 사용하고 생각하고 있음 각 학생에게 '뉴 스코어'가 추가되었습니다. 하지만 나는 데이터 단계에서 전체 데이터 집합 IN의 평균과 표준을 계산하는 방법을 모른다. 난 그냥 proc 수단을 사용하여 그것을 계산할 수 있고 그것을 수동으로 입력 알아요. 하지만 나는 많은 시간을 할애해야하고 변수와 다른 stuf를 떨어 뜨릴 필요가 있습니다. 그래서 나는 똑같은 단계에서 그것을 계산할 수 있기를 바랄뿐입니다.

데이터 exemple : 해봤

___VAR_ testscore newscore
Student1 5 ×
Student2 8 ×
Student3 5 ×

번호 :

data new; 
set old; 
newscore=(oldscore-(mean of testscore))/(std of testscore) 
run; 

(의 어느 게시 질수 실제 데이터는 서버에서 제거 할 수 없습니다.)

누구나이 트릭을 가져 오는 방법을 알고 있습니까?

최고

+1

질문을 편집하여 지금까지 시도한 일부 샘플 데이터와 sas 코드를 포함하십시오. – user667489

답변

0

방법 항목이 문제를 해결 효율적인 방법은 시저의 stdize을 사용하는 것입니다. 그것은 트릭을 할 것이고 당신은 이것에 대한 평균과 표준 편차를 계산할 필요가 없습니다.

data have; 
input var $ testscore; 
cards; 
student1 5 
student2 8 
student3 5 
; 
run; 

data have; 
set have; 
newscore = testscore; 
run; 

proc stdize data=have out=want; 
    var newscore; 
run; 

방법 2 : 당신이 수단과 PROC 수단으로부터 표준 편차를 복용 매크로에서 자신의 가치를 저장하고 우리의 계산을 사용하여 제안한다.

proc means data=have; 
var testscore; 
output out=have1 mean = m stddev=s; 
run; 

data _null_; 
set have1; 
call symputx("mean",m); 
call symputx("std",s); 
run; 

data want; 
set have; 
newscore=(testscore-&mean.)/&std.; 
run; 

내 출력 :

var   testscore newscore 
student1  5   -0.577350269 
student2  8   1.1547005384 
student3  5   -0.577350269 

내가 어떤 쿼리의 경우에 알려주십시오.

+0

안녕하세요, 많이 고맙습니다. Proc stdize를 사용하면 작업이 훨씬 쉬워졌습니다. 그리고 다른 방법도 고마워, 나는 당신이 출력을 저장하고 다시 사용하는 proc 수단을 사용할 수 있다는 것을 알고 있습니다. 방금 테이블을 만들었지 만. Thansk 많이! – Storm

+0

참. 그러나 값을 저장하고 수동으로 입력하지 않고 (이 경우 평균과 표준 편차로) 값을 사용하는 방법을 알아야하기 때문에 다른 방법으로 말했습니다. 천만에요. 도와 드리겠습니다 :) –

+0

Arh ofcourse, done, im very stackoverflow on new :) – Storm

1

데이터 단계에서이 작업을 시도하면 안됩니다. proc means으로하십시오. 아무 것도 입력 할 필요가 없으며 데이터 세트의 값을 가져옵니다.

답변에 완전한 코드를 제공 할만큼 충분하지는 않지만 기본 아이디어는 제공하십시오.

proc means data=sashelp.class; 
var height weight; 
output out=class_stats mean= std= /autoname; 
run; 

data class; 
    if _n_=1 then set class_Stats; *copy in the values from class_Stats; 
    set sashelp.class; 
    height_norm = (height-height_mean)/(height_stddev); 
    weight_norm = (weight-weight_mean)/(weight_stddev); 

run; 

다른 방법으로는, 당신이 할 것 PROC STDIZE 사용합니다.

proc stdize data=sashelp.class out=class_Std; 
    var height weight; 
run; 
+0

답변 해 주셔서 감사합니다. proc stdize를 알지 못했지만 매력과 같은 역할을했습니다! 다시 감사합니다. – Storm