作者summerslam (BB)
看板Statistics
標題[程式] SAS 資料處理
時間Sun Feb 26 22:07:28 2012
[軟體程式類別]:
SAS
[程式問題]:
刪除資料以及篩選資料
[軟體熟悉度]:
新手(不到1個月)
[問題敘述]:
各位高手好,目前在處理資料時遇到一些問題,希望有高手可以指點一下。
data:
date ACC bs vol time
20010101 12 b 5 10:16:48.760000
20010107 12 s 1 12:00:05.230000
20010101 15 b 4 10:16:48.760000
20010107 15 s 1 12:00:05.230000
20010107 15 s 1 12:03:15.150000
20010107 15 b 1 12:05:25.150000
20020209 23 b 3
20030205 37 b 5 10:25:25.250000
20030704 37 s 3 11:02:15.230000
想問的是 (1)如果中間有資料時間為空白(不是 '.'),要如何刪除?
(2)只想抓出03年的資料
(3)想要計算淨數量變化 也就是如果BS=B 則NETVOL為VOL的正值
若BS為S,則NETVOL為VOL的負值,然後ACQ是以各帳號分別累積加總
(3)想要的結果為:
date ACC bs vol time NETVOL ACQ
20010101 12 b 5 10:16:48.760000 5 5
20010107 12 s 1 12:00:05.230000 -1 4 <---5減1
20010101 15 b 4 10:16:48.760000 4 4 <---又重新
20010107 15 s 1 12:00:05.230000 -1 3 <---4-1
20010107 15 s 1 12:03:15.150000 -1 2 <---3-1
20010107 15 b 1 12:05:25.150000 1 3 <---2+1
20030205 37 b 5 10:25:25.250000 5 5
20030704 37 s 3 11:02:15.230000 -3 2
[程式範例]:
(1)我的指令為:
data ata.test;
set ata.data;
if time=. then delete;
run;
(2)指令為
data ata.test;
set ata.data;
where date contains '2003';
run;
(3)計算NETVOL指令為
data ata.test;
set ata.data;
if bs='b' then netvol= vol;
else if bs='s' then netvol=-vol;
run;
計算ACQ指令為
data ata.test;
set ata.data ;
RETAIN ACQ 0;
ACQ=ACQ + vol;
if acc^=lag(acc) then ACQ=vol;
run;(這段是看板上學的)
希望有高手能指導一下哪邊寫錯,該如何寫,謝謝。
-----------------------------------------------------------------------------
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.37.60.179
※ 編輯: summerslam 來自: 114.37.60.179 (02/26 22:29)
※ 編輯: summerslam 來自: 118.161.187.129 (02/28 01:10)