【问题标题】:Error in do loop, creating variables over a time span in SASdo循环中的错误,在SAS中的一段时间内创建变量
【发布时间】:2021-06-05 04:34:29
【问题描述】:

我有一个数据集,其中包含给定项目的开始日期和结束日期。我正在尝试计算我们每年运行的项目数量,因此如果一个项目从 2010 年到 2013 年进行,那么它应该在 2010 年、2011 年、2012 年和 2013 年计算。我在之前的数据集中进行了这项工作,但正在运行它在一个新数据集上,我在 do 循环中遇到错误。

|Project |StartDate| EnDDate | UserID |
|:-------:|:--------:|:--------:|:-------:|
|Proj1   |1/15/2010|3/21/2013| 1|
|Proj2   |7/31/2015| 9/3/2018|  2|

这是我想要得到的:

|Project |StartDate |EnDDate   |Year |UserID|
|:-------:|:---------:|:---------:|:----:|:-----:|
|   Proj1 |  1/15/2010| 3/21/2013 |2010 |1|
|   Proj1  | 1/15/2010| 3/21/2013 |2011 |1|
|   Proj1  | 1/15/2010| 3/21/2013 |2012 |1|
|   Proj1  | 1/15/2010| 3/21/2013 |2013 |1|
   ...

我一直在使用下面的代码

data test2;
 set users;
 do i = 0 to (year(enddate)-year(startdate));
  year = year(startdate)+i;
  drop i;
  output;
 end;
run;

但我收到以下错误:错误:无效的 DO 循环控制信息,INITIAL 或 TO 表达式丢失或 BY 表达式缺失、为零或无效。

我尝试按开始日期、结束日期、开始日期和结束日期排序,并更改日期格式无济于事(它是 DATE9。)。我之前肯定遗漏了一些明显的东西,因为该代码与以前的数据库一起使用,但我不确定我可能会遗漏什么。

非常感谢任何帮助。

【问题讨论】:

  • 您的 STARTDATE 和 ENDDATE 变量真的是日期吗?这些变量的类型和长度是多少?他们有附加格式吗?如果是,是什么格式?
  • 显示错误信息的详细信息。日志应该显示 startdate 和 enddate 的值。

标签: database sas


【解决方案1】:

在尝试使用这些值来控制 DO 循环之前,请确保您有正确的开始日期和结束日期。

data test2;
  set users;
  if 2=n(startdate,enddate) then do year = year(startdate) to year(enddate);
    output;
  end;
run;

【讨论】:

  • 谢谢!我错过了日期,所以这完全有道理。
猜你喜欢
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2021-12-22
  • 1970-01-01
相关资源
最近更新 更多