作者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)