【问题标题】:SAS Macro in order to create a table according to an indexed array?SAS宏以便根据索引数组创建表?
【发布时间】:2016-08-10 10:41:57
【问题描述】:

我有一个包含 5 个变量的表格:

id year_beg year_end month_beg month_end

当年/月与根据前一个表的对象的持续时间匹配时,我会创建一个列中包含年的表,每个 obno 的月。

感谢您的帮助。

【问题讨论】:

  • 能否分享您的数据集样本?
  • 似乎 proc transpose 可以解决问题,但我需要查看数据集
  • 是的,谢谢。
  • Object_id Yr_beg Month_beg Yr_end Month_end (169330, 1998, 12, 2008, 11) (169331, 1999, 5, 2005, 6)
  • 我看不出您在 cmets 中发布的数据有什么不同。您可以编辑问题以放入数据吗?目标是将原始变量隐含的时间段扩展为多条记录吗?

标签: arrays list macros sas


【解决方案1】:
<!DOCTYPE html>

Obs OBNO beg end
1 169330 36503 39778
2 169331 36501 39274
3 173535 36369 39511
4 173704 36424 39468
5 185348 36517 39630
6 186455 36658 39476
7 188162 36690 39344
8 190160 36767 39433
9 190164 36803 39469
10 192073 36803 39526


%macro corps;
%do annee = 1999 %to 2016;
%do mois = 1 %to 12;
proc sql;
create table out_&amp;mois&amp;annee as
select &amp;annee as year, &amp;mois as month, obno
from ent.Bornescontrat
having mdy(&amp;mois,1,&amp;annee) between beg and end or
(-1 + intnx("month",mdy(&amp;mois,1,&amp;annee),1)) between beg and end
;
quit;


%if &amp;mois = 1 %then
%do;
data out_&amp;annee;
@ 987654350@
run;
%end;
%else
%do;
data out_&amp;annee;
set out_&amp;annee out_&amp;mois&amp;annee;
run;
%end;

proc sql;
drop table out_&amp;mois&amp;annee;
quit;

%end;


%if &amp;annee = 1999 %then
%do;
data ent.out;
set out_&amp;annee;
run;
%end;
%else
%do;
@ 987654375@
set ent.out out_&amp;annee;
run;
%end;

proc sql;
drop table out_&amp;annee;
quit;


%end;
%mend;

【讨论】:

  • beg 和 end 是日期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
相关资源
最近更新 更多