首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LAG函数未完成

LAG函数未完成
EN

Stack Overflow用户
提问于 2015-04-23 09:40:25
回答 2查看 102关注 0票数 2

我正在构建一个生命表。我的数据如下所示:

代码语言:javascript
运行
复制
age    npx       
=================
0-1    0.996
1-4    0.9955
5-9    0.9966

我想构造一个新的变量lxage="0-1"lx值为100,000。对于前一条记录,"1-4"的值将为lx * npx

下面是我的代码:

代码语言:javascript
运行
复制
 if age = "0-1" then lx = 100000;
 lag_lx  = lag1 (lx);
 lag_npx = lag1 (npx);

 lx = lag_lx * lag_npx;

发生的情况是,程序在第二条记录之后停止计算lx;从记录3开始,lx具有. (缺失)

EN

回答 2

Stack Overflow用户

发布于 2015-04-23 19:01:44

我在这里走ifn路线,因为它不会搞砸您认为的滞后值,而且它使代码非常简单(请阅读this paper)。您还需要@Alex A声明的retain语句。

代码语言:javascript
运行
复制
data have;
    input age $ npx;
    datalines;
0-1    0.996
1-4    0.9955
5-9    0.9966
;

data want;
set have;
retain lx;
lx = ifn(age='0-1',100000,lx*lag(npx));
run;
票数 4
EN

Stack Overflow用户

发布于 2015-04-23 16:23:53

问题是只有在使用LAG时,这些值才会存储在LAG中。来自support.sas.com:“只有在执行函数时,才会在队列底部存储值并从队列顶部返回值。如果出现有条件执行的LAGn函数,则只会存储和返回值来自满足条件的观察值。”

这段代码并不美观,可以改进,但它可以完成这项工作。

代码语言:javascript
运行
复制
data have;
    input age $ npx;
    datalines;
0-1    0.996
1-4    0.9955
5-9    0.9966
;

data want;
    set have;   
    IF _N_ = 1 Then lx = 100000;
            lag_lx  = lag(lx);
            lag_npx = lag(npx);
    IF _N_ ne 1 Then lx = lag_lx * lag_npx;
            lag_lx  = lag(lx);
            lag_npx = lag(npx);
    IF _N_ ne 1 Then lx = lag_lx * lag_npx;
RUN;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29812075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档