楼主: addictedtome
5544 24

[原创博文] SAS求解一个问题,关于寻找连续出现的变量 [推广有奖]

21
addictedtome 发表于 2010-4-21 07:25:44
14# yatming

是的,说的很有道理,我开始也没注意这点。。。

22
addictedtome 发表于 2010-4-21 07:28:11
16# sushe1527

我是不是可以改成把if z=3 then output,改成if z>=3 then output? 因为我需要返回一个值当持有4个季度或超过4个季度的。

23
sushe1527 发表于 2010-4-21 09:50:50
addictedtome 发表于 2010-4-21 07:28
16# sushe1527

我是不是可以改成把if z=3 then output,改成if z>=3 then output? 因为我需要返回一个值当持有4个季度或超过4个季度的。
z=3和z>=3所表示的stock和code是一样的,都是4个季度或者以上的
但是 "=" 比 ">=" 产生的数据会少一些,加上后面的匹配,速度会快一点~~

24
addictedtome 发表于 2010-4-21 10:36:03
23# sushe1527

下面是我按你的程序写的:

首先import data "fund"。

data fund1;
set fund;
date=mdy(input(substr(date,6,2),f2.),input(substr(date,9,2),f2.),input(substr(date,1,4),f4.));     /*因为我的数据里面的date是字符属性,不能用format yymmdd改*/
run;

proc sort data=fund1 out=fund01;
by stock date fund_code;
run;

proc sort data=fund01;
by stock date;
run;

data tmp;
set fund01;
by stock date;
mark=dif(year(date)*4+qtr(date));
if mark=1 then z+mark;
else z=0;
if z=3 then output;
run;


proc sql;
create table tmp1 as
select * from fund1 as left join tmp
on fund1.stock=tmp.stock and fund1.fund_code=tmp.fund_code;
quit;
data final;
merge fund1 tmp1;by stock date fund_code;
if mark=. then mark=0;drop z;
proc print data=final;
run;

出现了这个几个问题:
656  on fund1.stock=tmp.stock and fund1.fund_code=tmp.fund_code;
WARNING: Variable stock already exists on file WORK.TMP1.
WARNING: Variable date already exists on file WORK.TMP1.
WARNING: Variable fund_code already exists on file WORK.TMP1.
WARNING: Variable number_of_shares already exists on file WORK.TMP1.
WARNING: Variable proportion already exists on file WORK.TMP1.

并且最后处理的final,mark值全部都是0,但是我目测至少好几只股票都被某个基金连续持有了4个季度..

是不是我的程序哪里写错了.....?

25
addictedtome 发表于 2010-4-21 12:07:01
谢谢各位热心的朋友,最后按照sushe1527的方法,数据处理成功了!

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 05:08