楼主: me_christia
5615 6

sas 急急急!如何插入行,使新行数据等于前一行,直到。。 [推广有奖]

  • 0关注
  • 0粉丝

初中生

80%

还不是VIP/贵宾

-

威望
0
论坛币
2 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
165 点
帖子
11
精华
0
在线时间
12 小时
注册时间
2016-5-3
最后登录
2016-7-27

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
现在我有一个数据文件,有6个变量,
date,               time,       sa,      sx,          sy,         sz,
22/08/2012     00:01      0.32    14.55     90.32     104.55
22/08/2012     00:02      0.34    14.56     90.34     104.78
22/08/2012     00:04      0.33    14.60     90.52     104.68
22/08/2012     00:08      0.31    14.44     90.50     104.59



我想按每秒的时间间隔自动填充数据,比如:00:03秒时,该行记录等于上一秒记录,每次增加一行,直到该时间有记录。

date,               time,       sa,      sx,          sy,         sz,
22/08/2012     00:01      0.32    14.55     90.32     104.55
22/08/2012     00:02      0.34    14.56     90.34     104.78
22/08/2012     00:03      0.34    14.56     90.34     104.78
22/08/2012     00:04      0.33    14.60     90.52     104.68
22/08/2012     00:05      0.33    14.60     90.52     104.68
22/08/2012     00:06      0.33    14.60     90.52     104.68
22/08/2012     00:07      0.33    14.60     90.52     104.68
22/08/2012     00:08      0.31    14.44     90.50     104.59



希望大神指导。 非常感谢!!!!
二维码

扫码加我 拉你入群

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

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

关键词:time date 时间间隔 非常感谢 数据文件 如何

沙发
me_christia 发表于 2016-7-10 18:58:21 |只看作者 |坛友微信交流群
有人可以帮助解决吗?

使用道具

藤椅
zqy458219593 发表于 2016-7-11 11:20:11 |只看作者 |坛友微信交流群
这种填充缺失数据的代码,最恶心了。。。。。必须打赏啊。。
  1. data a;
  2.         input date time sa sx sy sz;
  3.         informat date ddmmyy8. time time6.;
  4.         format date ddmmyy8. time time6.;
  5.         datalines;
  6. 22/08/2012 00:01 0.32 14.55 90.32 104.55
  7. 22/08/2012 00:02 0.34 14.56 90.34 104.78
  8. 22/08/2012 00:04 0.33 14.60 90.52 104.68
  9. 22/08/2012 00:08 0.31 14.44 90.50 104.59
  10. 22/08/2012 00:09 0.31 14.44 90.50 104.59
  11. 22/08/2012 00:13 0.31 14.44 90.50 104.59
  12. ;
  13. run;

  14. data b c;
  15.         set a;
  16.         retain timez timex saz sxz syz szz;
  17.         by date;

  18.         if first.date then
  19.                 do;
  20.                         saz=sa;
  21.                         sxz=sx;
  22.                         syz=sy;
  23.                         szz=sz;
  24.                         timez=time;
  25.                         output b;
  26.                 end;
  27.         else
  28.                 do;
  29.                         if time-timez eq 60 then
  30.                                 do;
  31.                                         saz=sa;
  32.                                         sxz=sx;
  33.                                         syz=sy;
  34.                                         szz=sz;
  35.                                         timez=time;
  36.                                         output b;
  37.                                 end;
  38.                         else
  39.                                 do;
  40.                                         output b;
  41.                                         timex=time;
  42.                                         do i=1 to (time-timez-60) by 60;
  43.                                                 asd=time;
  44.                                                 asddd=timez;
  45.                                                 time=timez+60;
  46.                                                 sa=saz;
  47.                                                 sx=sxz;
  48.                                                 sz=szz;
  49.                                                 sy=syz;
  50.                                                 timez=timez+60;
  51.                                                 output c;
  52.                                         end;
  53.                                         timez+60;
  54.                                 end;
  55.                 end;

  56.         format timez asd asddd time6.;
  57. run;

  58. data d;
  59.         set b c;
  60.         keep date time sz sy sa sx;
  61.         run;
复制代码
已有 1 人评分论坛币 学术水平 热心指数 收起 理由
admin_kefu + 30 + 2 + 5 热心帮助其他会员

总评分: 论坛币 + 30  学术水平 + 2  热心指数 + 5   查看全部评分

使用道具

板凳
lyfyb99 在职认证  发表于 2016-7-11 12:43:11 |只看作者 |坛友微信交流群
data a;
        input date time sa sx sy sz;
        informat date ddmmyy8. time time6.;
        format date ddmmyy8. time time6.;
        datalines;
22/08/2012 00:01 0.32 14.55 90.32 104.55
22/08/2012 00:02 0.34 14.56 90.34 104.78
22/08/2012 00:04 0.33 14.60 90.52 104.68
22/08/2012 00:08 0.31 14.44 90.50 104.59
22/08/2012 00:09 0.31 14.44 90.50 104.59
22/08/2012 00:13 0.31 14.44 90.50 104.59
;
run;

proc sort; by date time; run;

data b;
merge a a(firstobs=2 keep=time rename=(time=time1));
run;

data c;
set b;
by date time;
retain time;
if last.date then time1=.;
dif=(time1-time);
output;
if dif>60 then do until (time=time1-60);
time=time+60;
output;
end;
run;
已有 1 人评分论坛币 收起 理由
admin_kefu + 30 热心帮助其他会员

总评分: 论坛币 + 30   查看全部评分

使用道具

报纸
lyfyb99 在职认证  发表于 2016-7-11 12:43:12 |只看作者 |坛友微信交流群
data a;
        input date time sa sx sy sz;
        informat date ddmmyy8. time time6.;
        format date ddmmyy8. time time6.;
        datalines;
22/08/2012 00:01 0.32 14.55 90.32 104.55
22/08/2012 00:02 0.34 14.56 90.34 104.78
22/08/2012 00:04 0.33 14.60 90.52 104.68
22/08/2012 00:08 0.31 14.44 90.50 104.59
22/08/2012 00:09 0.31 14.44 90.50 104.59
22/08/2012 00:13 0.31 14.44 90.50 104.59
;
run;

proc sort; by date time; run;

data b;
merge a a(firstobs=2 keep=time rename=(time=time1));
run;

data c;
set b;
by date time;
retain time;
if last.date then time1=.;
dif=(time1-time);
output;
if dif>60 then do until (time=time1-60);
time=time+60;
output;
end;
run;

使用道具

地板
jj.ma 发表于 2016-7-12 06:55:41 |只看作者 |坛友微信交流群
如果你确认00:03那个世界单位是秒,就这样试试:

data a;
input date ddmmyy10. @12time time8. sa sx sy sz;
format date ddmmyy10. time time8.;
cards;
22/08/2012 0:00:01 0.32 14.55  90.32 104.55
22/08/2012 0:00:02 0.34 14.56  90.34 104.78
22/08/2012 0:00:04 0.33 14.60  90.52 104.68
22/08/2012 0:00:08 0.31 14.44  90.50 104.59
;
run;
data b;
set a ;
timel=lag(time); sal=lag(sa); sxl=lag(sx); syl=lag(sy); szl=lag(sz);
output;
dif=time-timel;
if dif>1 then do until (time=timel+1);
timel = timel +1;
output;
end;
keep date timel sal sxl syl szl;
run;
data c;
merge a b(firstobs=2 rename=(timel=time sal=sa sxl=sx syl=sy szl=sz));
by time;
run;
已有 1 人评分论坛币 收起 理由
admin_kefu + 30 热心帮助其他会员

总评分: 论坛币 + 30   查看全部评分

使用道具

7
jj.ma 发表于 2016-7-12 06:59:31 |只看作者 |坛友微信交流群
如果确认时间00:01为秒,就试一下这个:

data a;
input date ddmmyy10. @12time time8. sa sx sy sz;
format date ddmmyy10. time time8.;
cards;
22/08/2012 0:00:01 0.32 14.55  90.32 104.55
22/08/2012 0:00:02 0.34 14.56  90.34 104.78
22/08/2012 0:00:04 0.33 14.60  90.52 104.68
22/08/2012 0:00:08 0.31 14.44  90.50 104.59
;
run;
data b;
set a ;
timel=lag(time); sal=lag(sa); sxl=lag(sx); syl=lag(sy); szl=lag(sz);
output;
dif=time-timel;
if dif>1 then do until (time=timel+1);
timel = timel +1;
output;
end;
keep date timel sal sxl syl szl;
run;
data c;
merge a b(firstobs=2 rename=(timel=time sal=sa sxl=sx syl=sy szl=sz));
by time;
run;

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 12:42