全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3370 6
2016-06-01
各位高手,
下面的示例数据,请问用SAS如何实现,有个思路就可以。

谢谢。

希望达成这样的目的(判断标记):
对每个sell列:
如果值是NA,则标记为NA。
如果值不是NA,则判断其值是否大于buy列历史最低值(先排除已经删除的最低值):
        如果是,则标记为1,同时删除buy列的历史最低值;
        否则,标记为0;同时删除buy列该历史最低值。



历史最低值,例如,如果sell列属于Date=5,则buy列的历史最低值只判断Date=1~5,不判断Date=6~8.

先排除已经删除的最低值,例如,如果下表第8行数值是25.2,则标记为0,因为buy列的最低值25.18已经被删除了。

pic.jpg

最近大脑不好使,今天在电脑弄了小半天,逻辑是清晰的,但如何用SAS实现总是有点模糊。
目前想到的是,每次提取2个子集:
A:第N行的子集;(得到当前行的sell值)
B:第1-N行的子集;(得到历史行的最小buy值,并记录最小值所在的行数minrow)
如果sell>min(buy),则A子集增加一列标记为1,否则标记为0。合并所有A子集。
回到原始数据集,将minrow的buy值清空。

但感觉算法很不优雅。应该有什么递归可以简单地实现。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-6-1 16:31:19
date=5 标记为什么是0 shell=50.96 最低值是25.75
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-6-1 16:46:32
孤单的我们 发表于 2016-6-1 16:31
date=5 标记为什么是0 shell=50.96 最低值是25.75
对,是15.95输成50.95,谢谢指正。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-6-2 10:39:31
复制代码
纠正下错误:循环里的sql  where应该写成date<&i;对于第一个观测,没有历史最低值,可以赋个空值
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-6-2 14:51:17
多谢楼上的热心。非常简练的code。不过其中删除buy的要求没有达到,可能之前我描述的不清楚,目标是:当sell>min(buy)的时候,清空或删除min(buy)所在的行。

我自己根据你的code写了一个,不过就谈不上简练了。

复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-6-2 14:55:16
if "delBuy"="true" and _N_=&pos then buy=.;

上面这一句需要修改一下:"delBuy"改为"&delBuy"
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群