首页 > 解决方案 > 当我在 SAS 中计算新变量时,为什么我的值会发生偏移?

问题描述

我正在尝试使用 SAS 中的 YEAR() 函数从 MMDDYY10 格式的日期中提取年份。但是,当我计算名为“年”的新列时,所有值都会偏移一行。

例如,我想要:

    Date          Year

    12/31/2014       2014
    06/25/2007       2007 

但我得到:

   Date         Year
  12/31/2014       . 
  06/25/2007      2014
     .           2007


 Data Clinic2;
   format datebp MMDDYY10.;
   year = YEAR(datebp);
   set Clinic; 
   run;

标签: datesas

解决方案


语句的顺序很重要。您的程序正在计算年份,然后从数据集中读取 DATEBP 的值。由于 YEAR 不在源数据集中,因此 SET 语句不会更改 year 的值。

这就是为什么第一个观察值缺少 YEAR 值,尚未读取 DATEBP 的值。YEAR 的其余值没有丢失的原因是因为 SAS 在开始数据步骤的下一次迭代之前不会将来自输入数据集的变量重置为丢失。因此,对于第 2 次、第 3 次等迭代,您将根据在前一次迭代中读取的 DATEBP 值计算 YEAR。然后用 SET 语句读取的当前观察值替换 DATEBP 的值。


推荐阅读