2014-09-24 123 views
1

我正在努力根據某些條件在SAS中創建兩個矩陣。用條件創建一個矩陣

試圖在下面的格式創建一個12×12矩陣:

col1 col2 col3 col4 ............col12 
1  0 0 0 ............ 0 
1  1 0 0 ............ 0 
1  1 1 
0  1 1 
0  0 1 
1  0 0 
1  1 0 
1  1 1 
0  1 1 
0  0 1 
0  0 0 
0  0 0 

等。

和這個 -

col1 col2 col3 col4 ............col12 
1  0 0 0 ............ 0 
1  2 0 0 ............ 0 
1  2 3 
0  2 3 
0  0 3 
1  0 0 
1  2 0 
1  2 3 
0  2 3 
0  0 3 
0  0 0 
0  0 0 

等。基本上顯示col#而不是1。

我在網上閱讀了幾篇文章,並嘗試了Proc IML,但是我得到了一個程序不存在的錯誤。 我試過下面的代碼開始但沒有。我很困惑,應該如何輸入條件。

data test_matrices ; 
array col(12) col1-col12; 
do i=1 to 12; 
j=i-1; 
col(i)=ifn(i le 5 , 1, 0,0); 
output; 
end; 
run; 

請大家幫忙。

謝謝。

周杰倫

+0

IML是一個單獨的許可證,所以你可能沒有授權/安裝(這就是「不存在」的意思)。 – Joe 2014-09-24 16:32:01

+0

是的,我明白這一點。只是想提到這一點。但是有沒有其他辦法可以做到這一點?謝謝 – learnlearn10 2014-09-24 16:36:15

+0

除非這是一個SQL問題,否則您也應該忽略[tag:sql]標記。不要只用它來表示你會對SQL解決方案感到滿意; SAS用戶瞭解PROC SQL存在。 – Joe 2014-09-24 16:37:44

回答

0

謝謝喬!我感謝你的指導。 以下是2 1s 0和2 1s的代碼。

data test_matrices ; 
array col(12) col1-col12; 
do i=1 to 12; 
do j=1 to 12; 
col[j]= ifn((j-i ge 1) or (i-j=2) or (j > 8) or (i-j ge 5) , 0, 1); 
end; 
output; 
end; 
run; 
0

你需要什麼開始:

  • 數組必須有一個名字,除非他們是臨時數組,他們還需要變量名(他們會取名字串聯與數組索引如果你不提供它)。所以:

    array(*)1-12;

必須

array myVars(12) col1-col12; 
  • 你需要兩個循環,一個定義你的「行」,一個在您的列上工作,嵌套。 IE,對於第1行,做第12行,做第12行,做第12行。

所以這個:

do i=1 to 12; 
do j=1 to 12; 
    ... do stuff ... 
end; 
output; *you had this right! It goes in the outer loop since it defines rows.; 
end; 
  • 現在,你有什麼事情,可以讓你的工作就只是一個細胞。所以你在cell(i,j)上;什麼規則定義了應該去哪裏?找出該邏輯,然後將myvars [j]設置爲該值。你不能在'i'參數上操作,而是隻是定義你輸出的頻率。

也就是說,這樣的:

myvars[j] = i; 

這是不正確的,但是弄清楚什麼是正確的,並分配到myvars [J]。

+0

謝謝喬!我沒有添加另一個循環do j = 1到12,因爲它創建了144行。我已經更新了上面我的問題中的代碼。我處於一個可以填充1和0的階段,但仍然無法獲得正確的條件,在那裏我可以有2 1 0和2 1。 – learnlearn10 2014-09-24 19:03:44

+0

輸出需要位於* outer *循環中。不過,您仍然需要兩個循環,除非您將列值設置爲1的標準更直接 - 您從不解釋標準是什麼。 – Joe 2014-09-24 19:06:13

+0

第一個矩陣的條件是col1,row1的值應該是1 – learnlearn10 2014-09-24 19:13:04