作者songhome (爽轰)
看板Statistics
标题Re: [程式] SAS加总变数运算
时间Fri Mar 30 00:23:00 2018
※ 引述《aphrodite22 (啊哩布咧蹦)》之铭言:
: [程式问题]:将变数分类个别加总再运算
: [软体熟悉度]:
: 新手
: [问题叙述]:
: 资料如下
: 单位 姓名 AAA BBB CCC DDD
: 资讯室 林小姐 S S R
: 资讯室 周先生 R S S
: 资讯室 王先生 R D S S
: 资讯室 黄先生 R I D S
: .
: .
: 希望呈现
: 单位 AAA BBB CCC DDD
: 资讯室
: 收发室
: .
: .
: 而里面的数据为 S总数/S总数+I总数+R总数
: [程式范例]:
: 目前是想说用
: ODS TRACE ON/LISTING;
: PROC FREQ Data =Work.a;
: TABLE AAA BBB CCC DDD;
: ODS OUTPUT OneWayFreqs=Work.b;
: RUN;
: ODS TRACE off;
: PROC TRANSPOSE Data=Work.b out=Work.Tb;
: ID AAA BBB CCC DDD ;
: RUN;
: Data new;
: SET Work.Tb;
: if _NAME_='Frequency' then new=(S/(S+I+R))*100
: PROC print;
: RUN;
: 但在转置那边会跑出
: WARING:204 observations omitted due to missing ID valuse
: 之後的data new 就会显示变数I为初始化
: 不知道是不是因为我变数太多所以无法使用这种方式
: 还是说我後面应该要怎麽改才能让他只用我计算出来的次数?
: 谢谢
proc sort data=work.a;
by 单位;
quit;
data work.b;
set work.a;
by 单位;
array FEQ[4] AAA BBB CCC DDD;
if first.单位 then do;
new=0;
sum_new=0;
end;
do i = 1 to 4;
if not missing(FEQ[i]) then do;
sum_new+1;
if FEQ[i]="S" then new+1;
end;
end;
if last.单位 then do;
new=new/sum_new*100;
output;
end;
run;
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.249.20.118
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Statistics/M.1522340584.A.7D8.html
※ 编辑: songhome (111.249.20.118), 03/30/2018 00:23:46