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