Re: [程式] 一個SAS匯總的問題

看板Statistics作者 (談無慾)時間9年前 (2015/01/22 21:18), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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
請問一下科目有幾十個的話 VAR那邊有沒有比較有效率的
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
除非你科目那邊已經先換成T1~T20這類的才有辦法用巨集做
01/22 22:40, 4F
文章代碼(AID): #1KmFYELZ (Statistics)
文章代碼(AID): #1KmFYELZ (Statistics)