首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算问题,不计算las为t 1。

计算问题,不计算las为t 1。
EN

Stack Overflow用户
提问于 2016-11-08 10:57:38
回答 2查看 34关注 0票数 0

有人能解决这个问题吗?

代码语言:javascript
复制
data want;
 set have;
 by mac;

 if first.mac then do; DayDif=0; KmDif=0; end; 
       else do;
          DayDif = Date - lag(Date); /* calculate the difference between two dates */
          KmDiff = Kms - lag(Kms);
      end;
run;

我得到的结果是(0在第一行,但是。(第二):

代码语言:javascript
复制
Mac          Date   Kms           DayDif    KmDif
SP0001      10DEC07 1885462.00000   0        0
SP0001      12DEC07 1885462.00000   .        .
SP0001      30APR09 1885462.00000   505      0
SP0001      15JUL09 1886577.00000   76       1115
SP0001      16JUL09 1887667.00000   1        1090
SP0001      17JUL09 1889181.00000   1        1514
SP0001      17JUL09 1888825.00000   0       -356

.
. 

(当机器改变时,滞后被认为是t- (t-2)而不是t- (t-1) )为什么?代码有问题吗??

代码语言:javascript
复制
   Machine  Date    Kms          DayDif KmDif
   SP0001   01OCT14 2898108.00000   1   1059
   SP0001   02OCT14 2899148.00000   1   1040
   HP0001   03OCT14 2900334.00000   1   1186
   HP0002   17JAN08 926384.00000    0   0
   HP0002   18JAN08 926384.00000    -2450   -1973950
   HP0002   28APR09 1237332.00000   466 310948
   HP0002   29APR09 1238599.00000   1   1267
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-08 11:21:16

我能这样做..。

代码语言:javascript
复制
data want;
 set have;
    by mac;
      RETAIN lag_date lag_kms;
      DROP   lag_date lag_kms; 
       if first.Mac
          then do; 
                  DayDif=0;
                  KmDif=0;
          end; 
          else do;
              DayDif = abs(Date - lag_date);
              KmDif = abs(Kms - lag_kms);
      end;
      lag_date = Date;
      lag_kms = Kms;
run;

这给了我我想要的结果..。

代码语言:javascript
复制
Mac             Date    Kms        DayDif   KmDif
SP0001  10DEC07 1885462.00000   0         0
SP0001  12DEC07 1885462.00000   2         0
SP0001  30APR09 1885462.00000   505       0
SP0001  15JUL09 1886577.00000   76        1115
SP0001  16JUL09 1887667.00000   1         1090
SP0001  17JUL09 1888825.00000   1         1158
SP0001  17JUL09 1889181.00000   0         356

但现在我还要做一件事..。总计= 1158 + 356 ( 17JUL09 ),等等。即,添加一个列,其中我们将按日期对累积和值进行分组。

有什么建议吗?

票数 0
EN

Stack Overflow用户

发布于 2016-11-08 11:05:27

lag()函数的值不是从以前的观察中提取的(一个常见的误解)。每次执行函数时,它们都存储在内存中(请参阅文档)。

在您的示例中,当机器发生变化时,由于条件逻辑(if first.mac then do / else)而没有执行延迟函数,因此"t-2“值只是上一次迭代的结果。尝试以下几点:

代码语言:javascript
复制
data want;
  set have;
  by mac;
  if first.mac then do; 
    DayDif=lag(Date); /* executing the lag for subsequent iteration */
    DayDif=0; 
    KmDif=0; 
  end; 
  else do;
    DayDif = Date - lag(Date); /* calculate the difference between two dates */
    KmDiff = Kms - lag(Kms);
  end;
run;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40485127

复制
相关文章

相似问题

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