SAS中文论坛

标题: 一个简单地链式计算,求助! [打印本页]

作者: shiyiming    时间: 2006-7-18 11:16
标题: 一个简单地链式计算,求助!
看起来是一个很简单的链式计算,在excel中很容易就可实现了,可俺在sas中怎么也没写出来,具体如下:
两个数值型变量a和b,100条记录,变量a已有值,变量b只有第一条记录有值,
后面均为空值,现通过下面关系计算剩余的b变量的值,
b=lag(b)*a/lag(a), 我写了如下程序:
data test2;
set test1;
if _n_ ^=1 then
b=lag(b)*a/lag(a;
output;
run;

可怎么也计算不出来,求助!
作者: shiyiming    时间: 2006-7-18 22:48
标题: to hero
<!-- s:o --><img src="{SMILIES_PATH}/icon_surprised.gif" alt=":o" title="Surprised" /><!-- s:o -->

不知道对不对,是不是你的要求
data test2;
set test1 ;
c=lag(a);
b=5;  **假设你变量b的第一个数据是5;
b=b*a/c;
run;
作者: shiyiming    时间: 2006-7-19 17:48
标题: hi
呵呵,谢谢楼上的回复。可能不行。

不过我自己琢磨出来了,
写了一个宏程序,里面再利用call symput语句,搞定了。
作者: shiyiming    时间: 2006-7-19 21:20
标题: RE:
Make sure the syntax is correct in your testing codes.  But there was a ')' missing at the end in your sample code.
[code:8ced6]
if _n_ ^=1 then
b=lag&#40;b&#41;*a/lag&#40;a;
[/code:8ced6]
作者: shiyiming    时间: 2006-7-20 09:37
标题: 千万次的说
第一万次告诉你们,LAG不是取上一条记录的值的函数.
它只是看起来像.
[code:84909]data test1;
  input a b;
  cards;
1 3
4 &#46;
5 &#46;
6 &#46;
;
run;

data test2&#40;drop=lagb laga&#41;;
  set test1;
  retain lagb laga;
  if _N_^=1 then b=lagb*a/laga;
  lagb=b;
  laga=a;
run; [/code:84909]
作者: shiyiming    时间: 2006-7-20 19:22
标题: to ahuige
那他是取什么值呀
作者: shiyiming    时间: 2006-7-28 17:12
标题: to godensjj
lag需要指定位置,就跟在后面。

例如示例(既然已经知道第一个b了,那我直接写上去了,因为是输入数据嘛):

[code:a7930]data test1;
  input a b;
  cards;
1 3
3 &#46;
5 &#46;
7 &#46;
;
run;

data test2;
  set test1;
  b=lag0&#40;a&#41;*3;
  run;
proc print;
run;[/code:a7930]

结果如下:
[code:a7930]Obs    a     b

1     1     3
2     3     9
3     5    15
4     7    21[/code:a7930]
作者: shiyiming    时间: 2006-7-28 19:06
标题: to nfiona
是呀,我是这样理解的啊,但是请问“LAG不是取上一条记录的值的函数. ”又是什么意思呢??谢谢了~~~




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2