作者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/m.aspx?n=bbs/Statistics/M.1522340584.A.7D8.html
※ 編輯: songhome (111.249.20.118), 03/30/2018 00:23:46