SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1110|回复: 7
打印 上一主题 下一主题

一个简单地链式计算,求助!

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2006-7-18 11:16:29 | 只看该作者

一个简单地链式计算,求助!

看起来是一个很简单的链式计算,在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;

可怎么也计算不出来,求助!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2006-7-18 22:48:22 | 只看该作者

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;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2006-7-19 17:48:25 | 只看该作者

hi

呵呵,谢谢楼上的回复。可能不行。

不过我自己琢磨出来了,
写了一个宏程序,里面再利用call symput语句,搞定了。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2006-7-19 21:20:12 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2006-7-20 09:37:45 | 只看该作者

千万次的说

第一万次告诉你们,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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2006-7-20 19:22:25 | 只看该作者

to ahuige

那他是取什么值呀
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2006-7-28 17:12:26 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2006-7-28 19:06:12 | 只看该作者

to nfiona

是呀,我是这样理解的啊,但是请问“LAG不是取上一条记录的值的函数. ”又是什么意思呢??谢谢了~~~
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-3 22:07 , Processed in 0.069958 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表