Re: [程式] 一個SAS匯總的問題
※ 引述《songhome (爽轟)》之銘言:
: [軟體程式類別]:
: 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起來
: 就算一開始寫在同一個資料集
: 也會變成一個很寬的資料集,感覺怪怪的
: 想請問一下有沒有甚麼比較聰明的寫法
: 謝謝
數字長這樣
人 國文 數學 物理
A 10 80 70
B 12 50 48
C 16 123 45
PROC SORT DATA=RAWDATA OUT=STEP1;
BY "人"n;
RUN;
PROC TRANSPOSE DATA=STEP1 OUT=STEP2;
BY "人"n;
VAR "國文"n "數學"n "物理"n;
RUN;
PROC SQL;
CREATE TABLE WORK.QUERY_FOR_STEP2 AS
SELECT '人'n,
_NAME_ LABEL="科目名稱" AS '科目名稱'n,
COL1 LABEL="得分" AS '得分'n,
SUM(COL1) LABEL="分數加總" AS '分數加總'n
FROM WORK.STEP2
GROUP BY _NAME_
;
QUIT;
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.254.132.240
※ 文章網址: https://www.ptt.cc/bbs/Statistics/M.1421932686.A.563.html
推
01/22 22:01, , 1F
01/22 22:01, 1F
→
01/22 22:01, , 2F
01/22 22:01, 2F
→
01/22 22:39, , 3F
01/22 22:39, 3F
→
01/22 22:40, , 4F
01/22 22:40, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):