0
這是我第一次嘗試使用SAS宏,我正在追蹤來自UCLA Stats Consulting Group的this page。我有興趣在PROC MIXED中使用宏變量來避免複製和粘貼代碼塊(我的實際數據集有大約400個變量)。PROC宏中的SAS宏變量
我的例子修改了加州大學洛杉磯分校的例子,讓許多學校的學生。
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;
加州大學洛杉磯分校的示例演示瞭如何使用宏變量與PROC REG做幾件簡單的線性迴歸模型來預測閱讀成績的任何其他變量:
%let indvars = write math female socst;
proc reg data = hsb3;
model read = &indvars;
run;
quit;
爲此承擔學校辦成帳戶,我們可以使用PROC MIXED代替:
proc mixed data = hsb3;
class school;
model read = &indvars;
random school;
run;
quit;
但我真正想要做的是看看是否有任何成績的性別差異(還帶着學校在內) 。
%let scores = read write math science socst;
proc mixed data = hsb3;
class school;
model &scores = female;
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 =.
不知何故,宏變量是行不通的。 在PROC MIXED中使用宏變量作爲響應變量是否存在問題?他們在PROC REG響應變量工作....
proc reg data = hsb3;
model &scores = female;
run;
quit;
這就是爲什麼我是爲宏觀變量。當我在proc reg(最後一個代碼塊)中使用它們時,它會進行五次迴歸,每次迴應一個迴應(五個宏變量),而不是具有五個迴應變量的單個多變量回歸。 我一直在尋找與PROC MIXED一起發生的事情。我們不能使用宏變量來獲得五個混合模型,每個混合模型都有一個不同的單一響應變量?不寫代碼塊5次? – emudrak
不依據文檔。您需要生成多個PROC MIXED步驟。您可以轉換數據,以便每個變量的值出現在單獨的觀察值上,然後使用BY語句。有人更好地理解MIXED可能會知道另一種方法。 – Tom
從Tom引用的文檔看來,它看起來不是,PROC MIXED模型語句不允許變量列表用於因變量。我會首先編寫SAS代碼,以便按需要運行3個模型。並得到這個工作的SAS代碼。然後,您可以使用宏語言爲這3個模型(或300)生成代碼。或者湯姆的BY聲明方法可能會更好。如果您發佈想要作爲問題一部分生成的SAS代碼,人們可以更好地幫助您。請注意,所有宏語言都會生成SAS代碼 – Quentin