楼主: rick007007
7413 8

[原创博文] SAS编程请教 如何在不同情况下,将上一条记录的某个字段的值赋给当前记录的某个字段 [推广有奖]

  • 0关注
  • 1粉丝

本科生

66%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
1.2000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
106 点
帖子
40
精华
0
在线时间
145 小时
注册时间
2009-3-15
最后登录
2024-8-28

楼主
rick007007 发表于 2010-6-21 16:55:08 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
本人在做高频数据时,需要判断每笔交易的买卖方向。
交易数据主要包括 price, buyprice 和 sellprice三个价格;希望根据当前价格与上一条记录的价格来判断当前交易方向flag;判断方法是:
如果 price > ( lag(buyprice)+lag(sellprice) ) /2 ,  则 flag = 'B';
如果 price < ( lag(buyprice)+lag(sellprice) ) /2 ,  则 flag = 'S';
如果 price = ( lag(buyprice)+lag(sellprice) ) /2 ,  则 希望 flag 等于上一条记录的 flag;

已采用 flag= lag(flag), 无法实现我想要的结果;
请教高人有无好的办法解决这个问题!
非常感谢!
二维码

扫码加我 拉你入群

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

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

关键词:SAS编程 Price Rice Flag Sell price 记录 如何 高频 买卖

回帖推荐

jingju11 发表于5楼  查看完整内容

3# rick007007

本帖被以下文库推荐

沙发
pobel 在职认证  发表于 2010-6-21 17:26:46
如果 price > ( lag(buyprice)+lag(sellprice) ) /2 ,  则 flag = 'B';
如果 price < ( lag(buyprice)+lag(sellprice) ) /2 ,  则 flag = 'S';
flag1=lag(flag);
drop flag1;
如果 price = ( lag(buyprice)+lag(sellprice) ) /2 ,  则 希望 flag =flag1;
和谐拯救危机

藤椅
rick007007 发表于 2010-6-21 18:33:52
多谢楼上的指点!
但是添加下列语句与直接赋滞后的值有什么不同呢?
     flag1=lag(flag);
     drop flag1;

按照你的方法, 我改写程序片段为:

data a;
set a;
price2 = ( Buy_1 + Sell_1 )/2 ;
price2_lag = lag(price2);
flag = ' ';
run;

data a;
set a;
if price > price2_lag then flag = 'B';  
if price < price2_lag then flag = 'S';  
if price = price2_lag  then do;
  flag1=lag(flag);
  drop flag1;
  flag = flag1;  
end;
run;

似乎也没用啊?! 是哪里有问题呢?
再次请求帮助!

板凳
BraveMadMan 发表于 2010-6-21 20:54:18
用retain。

报纸
jingju11 发表于 2010-6-21 21:25:08
3# rick007007


  1. data a2;
  2. set a;
  3. retain flag;
  4. price2_lag = lag(mean( of Buy_1, Sell_1));
  5. if price > price2_lag then flag = 'B';  
  6.   else if price < price2_lag then flag = 'S';  
  7. if _n_ = 1 then flag = .; /*不知如何处理初值,暂为缺失*/
  8. run;
复制代码
已有 1 人评分热心指数 收起 理由
crackman + 1 不错

总评分: 热心指数 + 1   查看全部评分

地板
rick007007 发表于 2010-6-21 22:01:13
问题已解决,非常感谢4楼和5楼的兄弟热心指点!

7
pobel 在职认证  发表于 2010-6-22 07:52:35
rick007007 发表于 2010-6-21 18:33
多谢楼上的指点!
但是添加下列语句与直接赋滞后的值有什么不同呢?
     flag1=lag(flag);
     drop flag1;



data a;
set a;
price2 = ( Buy_1 + Sell_1 )/2 ;
price2_lag = lag(price2);
flag = ' ';
run;

data a;
set a;
if price > price2_lag then flag = 'B';  
if price < price2_lag then flag = 'S';  
if price = price2_lag  then do;
  flag1=lag(flag);
  drop flag1;
  flag = flag1;  
end;
run;

似乎也没用啊?! 是哪里有问题呢?
再次请求帮助!
data a;
set a;
price2 = ( Buy_1 + Sell_1 )/2 ;
price2_lag = lag(price2);
flag = ' ';
run;

data a;
set a;
if price > price2_lag then flag = 'B';  
if price < price2_lag then flag = 'S';  
flag1=lag(flag);
  drop flag1;
if price = price2_lag  then do;
    flag = flag1;  
end;
run;

这种情况你的lag函数不能用到if语句中,用到外面就不会有问题。具体你可参看lag函数的用法。
已有 1 人评分热心指数 收起 理由
crackman + 1 呵呵

总评分: 热心指数 + 1   查看全部评分

和谐拯救危机

8
rick007007 发表于 2010-6-22 10:09:43
非常感谢!

9
巴山石也 发表于 2010-9-1 14:37:01
呃。。高频数据中不是有给出买卖方向吗???。。。其中的BS这个变量不就是指的买卖方向吗????
楼主为什么不直接用啊?求正解

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 19:43