由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - 求助!请教我这个SAS code哪里错了啊?
相关主题
Sas问题, 有包子help for sas program
请教版上高人一个SAS编程问题SAS一问
求助关于Excel IF 的function[合集] 问个SAS和R的问题
请教SAS入门问题遇到一个SAS问题
求问 sas _c_ 什么意思help-SAS 读data 问题
SAS里怎么根据VALUE来选择需要OUTPUT的COLUMNS问一个如何sas里做这个问题
[合集] 请教一个简单的统计问题请教SAS ODS to Excel
急问如何在R里create lag variable请问如何改变 data set's column 位置. 比如name, id 换成id, name.
相关话题的讨论汇总
话题: lagv话题: portid话题: portfolios话题: sas话题: lag
进入Statistics版参与讨论
1 (共1页)
l*********g
发帖数: 177
1
我想实现的功能其实挺简单:
for i=1,....,n;
V_{i,0}=1;
Y_{i,t+1}=R_{i,t+1}-H_{i,t+1};
D_{i,t+1}=Y_{i,t+1}*V_{i,t};
V_{i,t+1}=H_{i,t+1}*V_{i,t};
这儿i代表比如不同的asset,t代表时间。
我的code:
proc sort data=Portfolios; by PortID time; run;
data tt;
set Portfolios;
lagPortID=lag(PortID);
lagV=lag(V);
Y=R-H;
if lagPortID ne PortID then lagV=1;
D=Y*lagV;
V=H*lagV;
run;
我的code中的PortID就是指代上面的那个index i, Portfolios的column结构就是
time PortID R H
我的问题是为什么结果中除了每个PortID的第一个observation的lagV是1,其他时间的
lagV全是missing,自然相应的D和V columns也是全missing的。请大拿告诉我的code错
在哪儿啊?我猜测可能是和sas的运行data step的规则有关,可是我查了查也不知道原
因。非常感谢大家!!
k*******a
发帖数: 772
2
你的portfolios的column本来没有V,那么当然都是missing
l*********g
发帖数: 177
3
但是我的目的就是在portfolios中增加2个column:V和D,自然原来是没有这个
v column啊。
还不太理解你的建议哦,那么该怎样改code啊?

【在 k*******a 的大作中提到】
: 你的portfolios的column本来没有V,那么当然都是missing
l*********g
发帖数: 177
4
自己顶一下。。。
大家给些建议哦!
m**u
发帖数: 17
5
lagV=lag(V);这一步的时候没有V, 所以V, lag(V)都是missing.
可以写成
array ...;
do i = 1 to n;
...

【在 l*********g 的大作中提到】
: 但是我的目的就是在portfolios中增加2个column:V和D,自然原来是没有这个
: v column啊。
: 还不太理解你的建议哦,那么该怎样改code啊?

k*******a
发帖数: 772
6
你可能加一句 V=lagV

【在 l*********g 的大作中提到】
: 但是我的目的就是在portfolios中增加2个column:V和D,自然原来是没有这个
: v column啊。
: 还不太理解你的建议哦,那么该怎样改code啊?

l*********g
发帖数: 177
7
但是每次循环的时候不是都是先运行lagV=lag(V)么?关于这个step我的目前理解是sas
应该是把上一次循环算出的V赋值给lagV吧。而因为我在code中有这么一句
if lagPortID ne PortID then lagV=1;
就能保证每个PortID group的第一个observation的lagV能被赋值为1,从而第一个
observation的V就能算出来而并非missing。这样从每个PortID group的第二个
observation开始就照理都能通过运行lagV=lag(V)得到非missisng的lagV啊,因为前一
次observation的V都是有值,而非missing啊。
请高人指教我这儿是哪里想错了啊?是不是和sas运行lag(。)语句和其他语句的顺序
有关啊?
先谢谢了哦!!

【在 m**u 的大作中提到】
: lagV=lag(V);这一步的时候没有V, 所以V, lag(V)都是missing.
: 可以写成
: array ...;
: do i = 1 to n;
: ...

l*********g
发帖数: 177
8
唉,还是不work哦。还有没有什么建议哦?
先谢谢哦!

【在 k*******a 的大作中提到】
: 你可能加一句 V=lagV
l*********g
发帖数: 177
9
自己再顶一下
s*****r
发帖数: 790
10
因为你的V需要不停的更新。 我猜lag是一开始把column提出来, 并不一直更新。
try this.
proc sort data=Portfolios; by PortID time; run;
data tt;
set Portfolios;
by portid time;
retain tt 0;
y=r-h;
if first.portid then do;
v=0;tt=v;
end;
else do;
d=y*tt;
v=h*tt;
tt=v;
end;
run;

【在 l*********g 的大作中提到】
: 我想实现的功能其实挺简单:
: for i=1,....,n;
: V_{i,0}=1;
: Y_{i,t+1}=R_{i,t+1}-H_{i,t+1};
: D_{i,t+1}=Y_{i,t+1}*V_{i,t};
: V_{i,t+1}=H_{i,t+1}*V_{i,t};
: 这儿i代表比如不同的asset,t代表时间。
: 我的code:
: proc sort data=Portfolios; by PortID time; run;
: data tt;

l*********g
发帖数: 177
11
work了哦!!
真的是lag 函数的问题哦!!看来不能总是完全依赖lag来做。
真的非常感谢大拿的帮助!!

【在 s*****r 的大作中提到】
: 因为你的V需要不停的更新。 我猜lag是一开始把column提出来, 并不一直更新。
: try this.
: proc sort data=Portfolios; by PortID time; run;
: data tt;
: set Portfolios;
: by portid time;
: retain tt 0;
: y=r-h;
: if first.portid then do;
: v=0;tt=v;

1 (共1页)
进入Statistics版参与讨论
相关主题
请问如何改变 data set's column 位置. 比如name, id 换成id, name.求问 sas _c_ 什么意思
[合集] how to calculate column sum not row sum in SAS? thanks a loSAS里怎么根据VALUE来选择需要OUTPUT的COLUMNS
[合集] 求助,怎样在SAS里读数据的column name?[合集] 请教一个简单的统计问题
A SAS infile problem急问如何在R里create lag variable
Sas问题, 有包子help for sas program
请教版上高人一个SAS编程问题SAS一问
求助关于Excel IF 的function[合集] 问个SAS和R的问题
请教SAS入门问题遇到一个SAS问题
相关话题的讨论汇总
话题: lagv话题: portid话题: portfolios话题: sas话题: lag