作者songhome (爽轟)
看板Statistics
標題[程式] 一個SAS匯總的問題
時間Thu Jan 22 20:06:08 2015
[軟體程式類別]:
SAS
[程式問題]:
資料處理
[軟體熟悉度]:
低(1~3個月)
[問題敘述]:
有一份原始資料大概長這樣
(科目幾十個)
人 國文 數學 物理 化學 地理 歷史 ....
A 10 80 70 95 63 45 ....
B 12 50 48 22 6 10 ....
C 16 123 45 66 70 89 ....
...
...
我想要得到一張匯總的表長這樣
科目 總分 及格人數 59分的人數 介於90~100的人
國文 15780 900 50 10
數學 50000 100 999 123
物理 ...
化學 ...
地理 ...
歷史 ...
...
[程式範例]:
之前寫到一半的程式不在手邊 不過邏輯大概是這樣
先用匯入原始資料,把第一欄也當作資料而不是變數名稱
而欄位名稱自動為F1~F50 (假設科目有49個)
接著建立兩個陣列
array course(49) F2-F50
array total_score(49) s1-s49
if _n_~=2 時以計算總分為例子
迴圈i 1~49
total_score(i)+course(i)
迴圈結束
if結束
如果最後一筆和第一筆才輸出
所以最後我會得到
F2 F3 ... F50 s1 s2 ... s49
國文 數學 ... 天文 . . . .
1234 4568 9897 9999
然後再讓這個資料集 _n_=2時 用ARRAY讓F2-F50等於s1-s49
最後轉置
捨棄s1-s49再把分數從文字轉回數字就可以得到我要的表格的其中一個(總分)
如果我要算其他項目就要重複產生很多資料集再MERGE起來
就算一開始寫在同一個資料集
也會變成一個很寬的資料集,感覺怪怪的
可是不用這種彆扭的方法的話
變成幾十個科目都要手動打
想請問一下有沒有甚麼比較聰明的寫法
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.199.141
※ 文章網址: https://www.ptt.cc/bbs/Statistics/M.1421928371.A.D17.html
※ 編輯: songhome (1.169.199.141), 01/22/2015 22:02:22