楼主: playmore
1319 3

[原创博文] 请问如何按要求添加观测 [推广有奖]

已卖:1645份资源

学科带头人

2%

还不是VIP/贵宾

-

TA的文库  其他...

R相关

经济学相关

金融工程

威望
1
论坛币
16356 个
通用积分
8.6697
学术水平
372 点
热心指数
394 点
信用等级
341 点
经验
15297 点
帖子
1194
精华
1
在线时间
1332 小时
注册时间
2007-1-11
最后登录
2025-12-1

初级学术勋章 初级热心勋章 中级热心勋章

楼主
playmore 发表于 2012-6-19 07:40:34 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我现在有如下的表格:

A   2011.6.30  xxx
A   2011.12.31 yyy
B   2011.12.31 zzz
B   2012.6.30 ttt
......

现在想对把原观测补齐为如下的样子:

A 2011.6.30 xxx
A 2011.7.31
A 2011.8.31
...
A 2011.12.31 yyy
...

也就是把两个离散的月份数据中插入连续的月份数据,请问应该怎么办?谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:怎么办 如何

沙发
522837271 发表于 2012-6-19 09:05:47
顶一个

藤椅
bolus123 发表于 2012-6-19 10:59:35
data a;
input a $1. date $13. b $8.;
datalines;
A   2011.6.30  xxx
A   2011.12.31 yyy
B   2011.12.31 zzz
B   2012.6.30 ttt
;
run;

data a;
set a;
year=input(substr(date,1,4),4.);
month=input(substr(date,find(date,'.')+1,find(date,'.',find(date,'.')+1)-find(date,'.')),4.);
lag_year=lag(year);
lag_month=lag(month);
lag_a=lag(a);
lag_b=lag(b);
run;

proc sort data=a;
by a year month b;
run;

data a;
set a end=end;
if a=lag_a then do;
                                if year-lag_year=0 then do month1=lag_month to month;
                                                                                        year1=year;
                                                                                        if month1=lag_month then b1=lag_b;
                                                                                        else if month1=month then b1=b;
                                                                                        else b1='';
                                                                                        output;
                                end;
                                else do year1=lag_year to year;
                                                        if year1=lag_year then do month1=lag_month to 12;
                                                                                                                if month1=lag_month then b1=lag_b;
                                                                                                                else b1='';
                                                                                                                output;
                                                                                                        end;
                                                        else if year1=year then do month1=1 to month;
                                                                                                                if month1=month then b1=b;
                                                                                                                else b1='';
                                                                                                                output;
                                                                                                        end;
                                                        else do month1=1 to 12;
                                                        b1='';
                                                        output;
                                                        end;
                                end;
end;
keep a b1 month1 year1;
rename month1=month year1=year b1=b;
run;

data b;
retain a date1 b;
length b $3. date1 $10.;
set a;
date=mdy(input(substr(compress(put(mdy(month,1,year)+31,yymmdd10.),'- '),5,2),2.),1,input(substr(compress(put(mdy(month,1,year)+31,yymmdd10.),'- '),1,4),4.))-1;
date1=compress(substr(compress(put(date,yymmdd10.)),1,4)||'.'||substr(compress(put(date,yymmdd10.)),6,2)||'.'||substr(compress(put(date,yymmdd10.)),9,2));
keep a b date1;
rename date1=date;
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
playmore + 1 + 1 + 1 对我很有帮助,谢谢!

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
playmore 发表于 2012-6-25 15:56:05
谢谢你的代码,其中的data步中加do循环,然后生成新的观测再output很有用
其他关于日期的处理你的代码稍显繁琐
其中挑出日期中的年/月/日可以用YEAR/MONTH/DAY函数,找一定间隔的日期可以用INTNX函数
最后还是要感谢你的回复!
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 01:11