이것은 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;
그래서 제가 매크로 변수를 고려했습니다. 내가 proc reg (마지막 코드 블록)에서 사용할 때 5 개의 응답 변수를 가진 단일 다 변수 회귀가 아닌 각각 하나의 응답 (차례로 5 개의 매크로 변수)을 갖는 5 개의 회귀를 수행합니다. 나는 PROC MIXED로 일어날 것을 찾고있었습니다. 각각 다른 응답 변수가있는 5 개의 혼합 모델을 얻기 위해 매크로 변수를 사용할 수 있습니까? 5 번 이상 코드 블록을 작성하지 않고? – emudrak
설명서에 맞지 않습니다. 여러 개의 PROC MIXED 단계를 생성해야합니다. 각 변수의 값이 별도의 관측치에 표시되도록 데이터를 변형 한 다음 BY 문을 사용할 수 있습니다. MIXED를 더 잘 이해하는 사람은 다른 방법을 알고있을 것입니다. – Tom
Tom이 인용 한 문서에서 PROC MIXED 모델 문은 종속 변수에 대한 변수 목록을 허용하지 않습니다. SAS 코드를 작성하여 원하는대로 3 가지 모델을 실행할 수 있습니다. SAS 코드를 작동하도록하십시오. 그런 다음 매크로 언어를 사용하여이 3 가지 모델 (또는 300)에 대한 코드를 생성 할 수 있습니다. 또는 Tom의 BY 문 접근 방식이 더 좋습니다. 질문의 일부로 생성하려는 SAS 코드를 게시하면 사람들이 더 잘 도와 줄 수 있습니다. 모든 매크로 언어는 SAS 코드를 생성합니다. – Quentin