2016-07-19 3 views
0

이것은 SAS 매크로를 사용한 첫 번째 시도이며 놀라운 UCLA Stats Consulting Group의 을 따릅니다. PROC MIXED에서 매크로 변수를 사용하여 코드 블록 복사 및 붙여 넣기를 피하는 데 관심이 있습니다. 실제 데이터 세트에는 ~ 400 개의 변수가 있습니다.PROC 혼합 SAS 매크로 변수

제 예제는 UCLA 예제를 수정하여 많은 학교에 학생들을 배치합니다.

%let indvars = write math female socst; 

proc reg data = hsb3; 
    model read = &indvars; 
run; 
quit; 

이에이 복용 학교를 위해 :

data hsb3; 
    input id school female race ses prog 
     read write math science socst; 
datalines; 
1 1 0 4 1 1 57 52 41 47 57 
2 1 1 4 2 3 68 59 53 63 61 
3 1 0 2 3 1 44 33 54 58 31 
4 1 0 4 3 3 63 44 47 53 56 
5 1 0 4 2 2 47 51 43 50 61 
6 1 1 4 2 2 44 52 51 50 61 
7 1 0 3 2 1 50 59 60 56 52 
8 1 0 1 2 2 34 46 52 53 57 
9 1 0 4 2 2 63 57 51 63 61 
19 2 0 3 1 2 57 63 41 63 61 
20 2 1 4 2 2 60 57 51 58 31 
21 2 0 4 3 2 57 55 51 53 56 
22 2 0 4 3 2 73 46 71 50 61 
23 2 0 4 2 1 54 65 57 50 61 
24 2 1 4 2 2 45 60 50 56 52 
25 2 0 3 2 1 42 63 43 53 57 
26 2 0 1 1 2 34 57 51 63 61 
27 2 0 4 2 2 63 49 60 55 31 
10 3 1 3 2 2 57 55 51 55 31 
11 3 1 4 3 3 60 46 71 31 56 
12 3 1 4 2 2 57 66 57 55 61 
13 3 0 3 3 2 50 60 50 31 61 
14 3 0 4 3 2 57 57 57 55 46 
15 3 0 3 3 3 68 55 50 31 56 
16 3 0 4 1 2 34 46 43 50 56 
17 3 0 4 3 2 34 65 51 50 56 
18 3 0 4 1 2 63 60 60 47 57 
28 4 1 3 2 2 57 52 52 53 61 
29 4 1 4 2 3 60 57 51 63 61 
30 4 1 1 2 2 57 65 51 55 46 
31 4 0 4 3 2 73 60 71 31 56 
32 4 0 4 3 2 54 63 57 55 46 
33 4 0 3 1 2 45 57 50 31 56 
34 4 0 1 1 1 42 49 43 50 56 
35 4 0 4 3 2 47 52 51 50 56 
36 4 0 4 2 1 57 57 60 56 52 
; 
run; 

UCLA의 예는 다른 변수 중 하나와 점수를 읽고 예측하는 몇 가지 간단한 선형 회귀 모델을 할 PROC의 등록과 매크로 변수를 사용하는 방법을 보여줍니다 계정, 우리가 사용할 수있는 PROC 대신 MIXED :

proc mixed data = hsb3; 
    class school; 
    model read = &indvars; 
    random school; 
run; 
quit; 

하지만 제가 정말하고 싶은 것은 점수 중 하나가 (여전히 계정으로 학교를 복용) 성별 차이가 있는지 확인하는 것입니다 . 어떻게 든 매크로 변수가 작동하지 않습니다

NOTE: The SAS System stopped processing this step because of errors. 
167 class school; 
168 model &indvars = female; 
         - 
         22 
         200 
NOTE: Line generated by the macro variable "INDVARS". 
1  write math female socst 
      ---- 
      73 
ERROR 22-322: Syntax error, expecting one of the following: a name, ;, (, *, -, /, :, @, 
       _CHARACTER_, _CHAR_, _NUMERIC_, |. 
ERROR 200-322: The symbol is not recognized and will be ignored. 
ERROR 73-322: Expecting an =. 

:

%let scores = read write math science socst; 

proc mixed data = hsb3; 
    class school; 
    model &scores = female; 
    random school; 
run; 
quit; 

는 지금은 오류가 발생합니다. PROC MIXED에서 매크로 변수를 응답 변수로 사용하는 데 문제가 있습니까? 그들은 PROC REG에 응답 변수로 작동 ....

proc reg data = hsb3; 
    model &scores = female; 
run; 
quit; 

답변

0

귀하의 문제는 매크로 변수 나 매크로 코드와 아무 상관이 없습니다. 대신 PROC MIXED에서 사용할 유효한 MODEL 문을 작성하지 않습니다.

The MODEL statement names a single dependent variable ...

아마도 데이터 변환을 시도해보십시오.

%let scores = read write math science socst; 
data want ; set hsb3 ; 
    array scores &scores ; 
    do i=1 to dim(scores); 
    score=scores(i); 
    name=vname(scores(i)); 
    output; 
    end; 
run; 
proc sort; by name ; run; 

proc mixed data = want; 
    by name; 
    class school; 
    model score = female; 
    random school; 
run; 
+0

그래서 제가 매크로 변수를 고려했습니다. 내가 proc reg (마지막 코드 블록)에서 사용할 때 5 개의 응답 변수를 가진 단일 다 변수 회귀가 아닌 각각 하나의 응답 (차례로 5 개의 매크로 변수)을 갖는 5 개의 회귀를 수행합니다. 나는 PROC MIXED로 일어날 것을 찾고있었습니다. 각각 다른 응답 변수가있는 5 개의 혼합 모델을 얻기 위해 매크로 변수를 사용할 수 있습니까? 5 번 이상 코드 블록을 작성하지 않고? – emudrak

+0

설명서에 맞지 않습니다. 여러 개의 PROC MIXED 단계를 생성해야합니다. 각 변수의 값이 별도의 관측치에 표시되도록 데이터를 변형 한 다음 BY 문을 사용할 수 있습니다. MIXED를 더 잘 이해하는 사람은 다른 방법을 알고있을 것입니다. – Tom

+0

Tom이 인용 한 문서에서 PROC MIXED 모델 문은 종속 변수에 대한 변수 목록을 허용하지 않습니다. SAS 코드를 작성하여 원하는대로 3 가지 모델을 실행할 수 있습니다. SAS 코드를 작동하도록하십시오. 그런 다음 매크로 언어를 사용하여이 3 가지 모델 (또는 300)에 대한 코드를 생성 할 수 있습니다. 또는 Tom의 BY 문 접근 방식이 더 좋습니다. 질문의 일부로 생성하려는 SAS 코드를 게시하면 사람들이 더 잘 도와 줄 수 있습니다. 모든 매크로 언어는 SAS 코드를 생성합니다. – Quentin