2013-06-20 2 views
0

ID 변수를 여러 번 사용할 때 SAS에서 데이터를 이항하는 가장 좋은 방법이 궁금합니다. 나는 이것을하기 위해 proc transpose 문에서 let 옵션을 사용할 수 있다는 것을 알고 있지만 평균을 계산할 때 모든 데이터를 제거하고 싶지는 않습니다. 나는 (이 새로운 데이터 세트를 사용하지 않을 할SAS에서 id 변수에 대한 여러 관측치로 데이터를 변환하는 방법은 무엇입니까?

student testnum1 testnum2 testnum3 testnum4 avg12  avg34 
1   30  45  67  .   33.33  67  
1   25  .  .  .   33.33  67 
2   22  63  .  .   43.5  . 
2   .   12  .  .   43.5  . 
2   .   77  .  .   43.5  . 
3   22  14  .  17   53  17 
3   17  .  .  .   53  17 

을 :

여기
data grades; 
input student testnum grade; 
cards; 
1 1 30 
1 1 25 
1 2 45 
1 3 67 
2 1 22 
2 2 63 
2 2 12 
2 2 77 
3 1 22 
3 1 17 
3 2 14 
3 4 17 
; 
run; 

proc sort data=grades; 
    by student testnum; 
run; 

proc transpose data=grades out=trgrades; 
    by student; 
    id testnum; 
    var grade; 
run; 

내가보고 내 결과 데이터 집합을하고자하는 방법이다 : 여기

내 데이터와 내 코드의 예입니다 얼마나 자주) 학생을위한 모든 testnum1 및 testnum2의 평균 점수 (avg12)와 학생을위한 모든 testenum3 및 testnum4 (avg34)의 평균 점수 인 새로운 항목을 만들 수 있습니다.

이 작업을 수행하는 데 훨씬 효율적인 방법이있을 수 있지만 난 곤경에 빠져 있습니다. 모든 조언을 주시면 감사하겠습니다.

답변

3

모든 테스트 1과 2의 평균값과 각 학생의 3과 4의 평균값이 필요하면 전혀 트랜스 포즈 할 필요가 없습니다. 그런 다음 기본 proc means

data grouped; 
    set grades; 
    if testnum In (1,2) then group=1; 
    else if testnum in (3,4) then group=2; 
run; 

: 단일 관찰의 평균이 필요한 경우

proc means data=grouped; 
    by student group; 
    var grade; 
    output out=averages mean=groupaverage; 
run; 

, 당신은 쉽게 averages 데이터 집합을 바꾸어 수 있습니다 당신이 필요로하는 간단한 데이터 단계입니다.

proc transpose data=grades out=trgrades; 
    by student; 
    id group; 
    var grade; 
run; 

업데이트 :

뿐만 그룹 테스트를 포맷을 사용하여 @Keith 우수한 선택이다 바와 같이

. 데이터 단계를 건너 뛰기 때문에 같은 형식으로 작성합니다

proc format; 
    value TestGroup 
     1,2 = 'Tests 1 and 2' 
     3,4 = 'Tests 3 and 4' 
    ; 
run; 

그런 다음 proc means이된다을 :

proc means data=grouped; 
    by student testnum; 
    var grade; 
    format testnum TestGroup.; 
    output out=averages mean=groupaverage; 
run; 

최종 업데이트 어떤 이유로, 당신이 정말로해야 할 필요가있는 경우


한 번의 관찰에서 모든 테스트 점수를 얻은 다음 고유하게 식별 할 수 있도록 데이터 단계를 사용하는 것이 좋습니다. by, testnum.first, retain 및 간단한 카운터를 사용하여 각 점수에 retake 번호를 할당하십시오. 이제 귀하의 전치는 retaketestnumid 개의 변수로 사용합니다. 거기에서 알아낼 수 있어야합니다.

지금 당장 SAS 숙제를하지 않았 으면 좋겠다.

+1

testnum을 그룹화하는 형식을 만들면 추가 변수를 만들지 않아도됩니다. Proc Means는 형식화 된 값으로 그룹화합니다. – Longfish

+0

우수 포인트, @ 키스. 나는 그 대답을 나의 대답에 추가 할 것이다. –

+0

고마워요, 이것은 제가하려고 한 것입니다. 나는 원래 마지막 걸릴 계획이었습니다.학생이 내 예에서 위와 같이 보이도록 데이터를 가져올 수 있다면 한 열에 avg12를, 다른 열에는 avg34를 사용하여 학생 한 줄을 남겨 둡니다. 그러나이 방법은 훌륭했습니다. 이것은 숙제 문제가 아니므로 걱정할 필요가 없습니다. – user27008

관련 문제