作者Clalin (CLA)
看板Statistics
標題[程式] sas資料處理問題
時間Wed Apr 13 01:56:56 2016
[軟體程式類別]:
sas
[程式問題]:
資料處理
[軟體熟悉度]:
新手
[問題敘述]:
目前手上的資料如下:
公司 員工 年度 薪酬 排名(依公司當年度薪酬)
甲 A 2000 400 1
甲 B 2000 300 2
甲 C 2000 200 3
乙 D 2002 600 1
乙 E 2002 500 2
丙 F 2005 750 1
丙 G 2005 650 2
丙 H 2005 550 3
丙 I 2005 450 4
我想要讓每間公司每一年度的資料比數都是3筆
如果超過三筆 就刪除薪酬最少的資料
如果不足三筆 就用最少薪酬將資料補足到3筆
也就是想要讓資料變成這樣:
公司 員工 年度 薪酬 排名(依公司當年度薪酬)
甲 A 2000 400 1
甲 B 2000 300 2
甲 C 2000 200 3
乙 D 2002 600 1
乙 E 2002 500 2
乙 E 2002 500 3
丙 F 2005 750 1
丙 G 2005 650 2
丙 H 2005 550 3
目前使用基本的proc rank方式依公司代號和年份將薪酬做排名
並將排名大於3的資料刪除:
proc rank out=rank descending;
var 薪酬
ranks rank;
by cusip year;
run;
data A;
set rank;
if rank>3 then delete;
run;
但是現在不知道要怎麼將當年度資料不足三筆的公司以最少薪酬的資料補到三筆
有試圖使用sql但是是新手不太會使用
希望有高手可以開示一下 謝謝 >"<
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.119.150.103
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Statistics/M.1460483818.A.427.html
※ 編輯: Clalin (223.137.217.198), 04/13/2016 01:58:28
1F:推 laba5566: If last.公司 and rank <3 then do until (rank=3) outp 04/13 02:51
2F:→ laba5566: ut; rank= rank+1; end; 04/13 02:51
我實際上要將資料補足到5筆,目前程式碼如下:
data A1;
set A;
by cusip year;
if last.cusip and last.year and rank<5 then do while (rank=5);
rank=rank+1;
end;
else output;
run;
但是這樣並沒有把各公司各年度資料補到5筆,總筆數甚至比data A還少一點,
請問我有哪裡打錯,或是可以用其他方法嗎?QQ
※ 編輯: Clalin (140.119.150.103), 04/13/2016 15:15:21
3F:推 h14753951: 先將cusip和year合併成一個欄位 04/13 17:00
4F:→ h14753951: 然後排序,其餘城市寫法同你剛剛po的,只是else要拿掉 04/13 17:02
5F:→ h14753951: 並把output寫在end前,如此是產生一個額外的dataset 04/13 17:04
6F:→ h14753951: 你還是要把它並回原本的dataset,並做整理 04/13 17:04