2016-07-19 164 views
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; 

回答

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(最後一個代碼塊)中使用它們時,它會進行五次迴歸,每次迴應一個迴應(五個宏變量),而不是具有五個迴應變量的單個多變量回歸。 我一直在尋找與PROC MIXED一起發生的事情。我們不能使用宏變量來獲得五個混合模型,每個混合模型都有一個不同的單一響應變量?不寫代碼塊5次? – emudrak

+0

不依據文檔。您需要生成多個PROC MIXED步驟。您可以轉換數據,以便每個變量的值出現在單獨的觀察值上,然後使用BY語句。有人更好地理解MIXED可能會知道另一種方法。 – Tom

+0

從Tom引用的文檔看來,它看起來不是,PROC MIXED模型語句不允許變量列表用於因變量。我會首先編寫SAS代碼,以便按需要運行3個模型。並得到這個工作的SAS代碼。然後,您可以使用宏語言爲這3個模型(或300)生成代碼。或者湯姆的BY聲明方法可能會更好。如果您發佈想要作爲問題一部分生成的SAS代碼,人們可以更好地幫助您。請注意,所有宏語言都會生成SAS代碼 – Quentin