作者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://webptt.com/cn.aspx?n=bbs/Statistics/M.1421928371.A.D17.html
※ 编辑: songhome (1.169.199.141), 01/22/2015 22:02:22