全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1341 3
2012-09-18
悬赏 50 个论坛币 已解决
想向老师们请教一个日期计算的问题:
(首先,假定有一个数据集叫做abc,它里面有两列变量叫做date1和date2,都是例如20120918这样的8位数值,先不考虑存在缺失值)

我自己写了一个宏,期望的功能是打开一个数据集,算出里面指定两列8位数值型日期变量的时间间隔,存为一列新变量。

例如:原来的数据集为:

date1 date2
20120101 20120103
20121001 20121005

调用宏%di(abc,date1,date2,days);

处理后的数据集为:

date1 date2 days
2012010120120103 2
2012100120121005 4

我写的宏如下:

复制代码

无论解答与否,感谢感谢。

最佳答案

pobel 查看完整内容

data abc; input date0 date1; cards; 20120101 20120103 20121001 20121005 ; %macro di(dataset,date0,date1,result); *result=date1后-date0前; data &dataset;set &dataset; d0y=int(&date0/10000); d0m=int(&date0/100-d0y*100); d0d=mod(&date0,100); date0=mdy(d0m,d0d,d0y); d1y=int(&date1/10000); d1m=int(&date1/100-d1y*100); d1d=mod(&date1,100); date1=mdy(d1m,d1d,d1y); ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-9-18 01:25:48

data abc;
  input date0 date1;
  cards;
20120101  20120103
20121001  20121005
;

%macro di(dataset,date0,date1,result);  *result=date1后-date0前;
data &dataset;set &dataset;
d0y=int(&date0/10000);
d0m=int(&date0/100-d0y*100);
d0d=mod(&date0,100);

date0=mdy(d0m,d0d,d0y);

d1y=int(&date1/10000);
d1m=int(&date1/100-d1y*100);
d1d=mod(&date1,100);

date1=mdy(d1m,d1d,d1y);


&result=date1-date0;
keep &date0 &date1 date0 date1 &result;
format date0 date1 yymmdd10.;

run;

%mend di;


%di(abc,date0,date1,result)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-9-18 09:37:53
lz可以参考下面我发的贴
https://bbs.pinggu.org/thread-1581992-1-1.html

先把你表格内的数值型变量彻底改为日期型变量
这样就可以简单的用INTCK函数计算日期间隔了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-9-18 22:04:02
pobel 发表于 2012-9-18 01:25
data abc;
  input date0 date1;
  cards;
很帅,谢谢。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群