SQL查询在SAS中的使用

huangapple go评论82阅读模式
英文:

Proq sql query in SAS

问题

我有一个包含ID和日期的表格,看起来像这样:

IDs 开始日期 结束日期
1 202105 202107
2 202201 202205
3 202101 202301

我需要输出所有日期,以月为单位均匀递增(使用日期格式date6.),以便我可以将输出表格用于进一步的连接。

IDs 新日期
1 202105
1 202106
1 202107
2 202201
2 202202
2 202203
2 202204
2 202205
.
.

使用SAS的PROC SQLDATA STEP,您可以使用DO循环来实现这个目标。以下是使用DATA STEP的示例代码:

data output_table;
   set your_input_table;
   format New_Date date6.;
   do New_Date = Start_Date to End_Date;
      output;
   end;
run;

上述代码会为每个ID生成从Start_Date到End_Date的所有日期,并将它们输出到新表output_table中。请将"your_input_table"替换为您的实际输入表格的名称。

这种方法是简单且有效的方式来实现您的需求。如果需要更多高级的日期处理,可以考虑使用SAS的日期函数来进行操作。

英文:

I have a table with IDs and dates which looks like

|IDs|Start_Date|End_Date|
|---|----------|--------|
|1|202105|202107|
|2|202201|202205|
|3|202101|202301|

And I need the output with all the dates in between basically uniformly incremented BY MONTH (format date6.) so that I can use the output table for further joins.

|IDs|New_Date|
|---|--------|
|1|202105|
|1|202106|
|1|202107|
|2|202201|
|2|202202|
|2|202203|
|2|202204|
|2|202205|
.
.

What kind of functions would let me do that in the most simplest and efficient way using either proq sql or data step in SAS?

Was thinking of trying loops in data step or INTCK function.

答案1

得分: 0

如果您想要增加日期/时间/日期时间值,而不是它们存储的单位(天/秒/秒),则可以使用INTNX()和偏移计数器的组合。要计算间隔的数量,请使用INTCK()函数。

所以要在START和END之间的每个月生成一个观察结果,您可以使用以下代码。

data want ;
  set have;
  do offset=0 to intck('month',start,end);
    date = intnx('month',start,offset);
    output;
  end;
  format date date9.;
run;

这段代码会在want数据集中生成每个月的观察结果,其中startend是您的起始和结束日期,date列包含生成的日期,使用date9.格式进行格式化。

英文:

If you want to increment date/time/datetime values by something other than the units (days/seconds/seconds) they are stored in then use a combination of INTNX() and an offset counter. To calculate the number of intervals use the INTCK() function.

So to generate one observation for every month between START and END you could use.

data want ;
  set have;
  do offset=0 to intck('month',start,end);
    date = intnx('month',start,offset);
    output;
  end;
  format date date9.;
run;

huangapple
  • 本文由 发表于 2023年7月10日 21:40:27
  • 转载请务必保留本文链接:https://go.coder-hub.com/76654334.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定