loops - sas 从变量循环一个月

标签 loops date sas

我正在尝试循环一系列日期以创建其间的日期。这将以月份为单位进行,始终显示相应月份的最后一天。给出了开始日期和结束日期(first_date 和 last_date),而 last_date 应始终指上个月的月底。

原始数据集如下所示:

customer id   first_date  last_date 
xy       135  01.01.2000  25.03.2005 
xy       247  19.03.2003  25.03.2005 
ab       387  01.06.2010  30.12.2012 
ab       128  01.05.2010  28.02.2011 
...

我的目标是拥有一个如下所示的数据集:

customer id   date
xy       135  31.01.2000
xy       135  28.02.2000
...
xy       135  28.02.2005
xy       247  31.03.2003
xy       247  30.04.2003
...
xy       247  28.02.2005

我发现迭代几天的解决方案非常简单(见下文),但我正在努力实现每月步骤和月末日期。

data want;
set have;
by customer id;
do day = first_date to last_date;
output;
end;
format day date9.;
run;

感谢您的帮助!!

最佳答案

首先,让我们获取一些数据:

data have;
  attrib customer length=$10 informat=$10.
        id         informat=best.
        first_date informat=ddmmyy10. format=ddmmyy10.
        last_date  informat=ddmmyy10. format=ddmmyy10.
        ;

  input customer $
        id
        first_date
        last_date 
        ;

datalines;
xy       135  01.01.2000  25.03.2005 
xy       247  19.03.2003  25.03.2005 
ab       387  01.06.2010  30.12.2012 
ab       128  01.05.2010  28.02.2011 
;
run;

intnx() 函数将在这里发挥作用。我们将创建一个名为 date 的新变量,然后使用 intnx 函数返回该日期的月底。只要该日期小于结束日期,我们就会继续将其输出到数据集,然后递增到下个月月底。

data want;
  format date ddmmyy10.;

  set have;

  date = intnx('month',first_date,0,'end');
  do while (date le last_date);
    output;
    date = intnx('month',date,1,'end');
  end;

  drop first_date last_date;
run;

关于loops - sas 从变量循环一个月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33760053/

相关文章:

java - 如何从 JCalendar 获取 JMonthChooser 字符串中的月份名称

python - 如何以 ddmmyyyy 格式将日期解释为 3 12 而不是 31 2

sql - SAS:如何在多个级别上计算不同

c - 删除链表元素会导致死循环

loops - Swift - UITextField 以编程方式从 for 循环中获取文本供以后使用

Python循环中操作数据List

php - 如何在 Laravel 中的一个 html 表中运行两个 foreach 循环?

用于解析大致日期的 C 库

python - 在 Pandas 中将数字 sas 日期转换为日期时间

mysql - SAS 中的大字符字段大小