楼主: 楊中
5309 18

[问答] 求如何把遗漏的日期补上并补齐缺的数据 [推广有奖]

11
楊中 发表于 2013-3-6 14:50:41
yongyitian 发表于 2013-3-6 04:11
能否把你输入的数据(dataset)传一部份上来看看.
Y大,一楼我更新内容了,希望我的说明,能够让你理解我的需求,谢谢啰^0^。

12
楊中 发表于 2013-3-6 14:52:47
playmore 发表于 2013-3-6 08:49
如果必须是字符型,而且只补原表存在日期条目的缺失时间
那么我觉得你先自己做张时间表,用下面的办法然 ...
恩~谢谢play大给的程序语法,小弟来try try看。

13
zhangzachary 发表于 2013-3-6 17:02:16
请把条件再补充一下吧,比如分钟是00-59,最后时刻是1345而不是2359,开始时刻是0900而不是0000等,会有所帮助。
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

14
楊中 发表于 2013-3-6 17:10:05
zhangzachary 发表于 2013-3-6 17:02
请把条件再补充一下吧,比如分钟是00-59,最后时刻是1345而不是2359,开始时刻是0900而不是0000等,会有所帮 ...
谢谢Z大的提醒,小弟补充上去了,感恩^0^

15
yongyitian 发表于 2013-3-7 08:07:58
/* Try this,  */
data Test_F;
   input date yymmdd8. PRC QTY key $  deal $4. ;
    format date date9. time hhmm5.;
   time = hms(substr(deal,1,2),substr(deal,3,2),0);
datalines;
20050602 242.2 1 TE 0904
20050602 242.5 1 TE 0936
20050602 242.8 1 TE 1008
20050603 6022 2 TX 1009
20050603 6023 2 TX 1015
20050830 6075 1 TX 0922
20050831 6049 1 TX 1106
20050909 6146 2 TX 0936
20050926 5936 1 TX 1232
20051003 6162 3 TX 1258
20051013 5972 1 TX 0806
20051025 5789 5 TX 0930
20051025 5789 1 TX 0940
; run;
proc sort data=Test_F;
   by date Time;
run;

/* creatting the date time (hour-minute) list */
data DateList (rename = (TimeList=Time));
    TimeClose = hms(13,45,0);
        format TimeClose TimeList hhmm5.;
    set Test_F;
        by date;
        if first.date then do;
           TimeList = Time;
           do TimeList = Time to TimeClose by 60;
                           output;
                end;
        end;
        drop TimeClose PRC QTY key Time deal;
run;

data Test_merge;
     merge DateList Test_F;
         by date time;
run;
proc print data=Test_merge; title 'Merge'; run;

/* Filling the missing */
data Filled_1 (Rename=(PRC_T = PRC
                                     QTY_T = QTY
                                     KEY_T = KEY
                                     Deal_T = deal));
format Date Date9. Time hhmm5. ;
format Key_T Deal_T $8.;
     set Test_merge;
         by date;
         if first.date then do;
                   PRC_T =.;
                       QTY_T = .;
                       key_T = ' ';
                       deal_T = ' '; end;
                if PRC ne . then do;
              PRC_T = PRC;
                  QTY_T =QTY;
                  KEY_T = KEY;
                  Deal_T = deal;
           end;
       Retain PRC_T QTY_T KEY_T Deal_T;
           drop PRC QTY KEY DEAL;
run;
proc print data=Filled_1; title 'Filled_1'; run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
楊中 + 1 + 1 + 1 热心帮助其他会员

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

16
楊中 发表于 2013-3-7 13:20:43
yongyitian 发表于 2013-3-7 08:07
/* Try this,  */
data Test_F;
   input date yymmdd8. PRC QTY key $  deal $4. ;
谢谢Y大!!!! 一早让您花心思帮小弟解答,真的很不好意思 = = "
小弟会好好研究一下这程序语法,套用到数据上,真的很感谢

17
楊中 发表于 2013-3-7 15:36:31
yongyitian 发表于 2013-3-7 08:07
/* Try this,  */
data Test_F;
   input date yymmdd8. PRC QTY key $  deal $4. ;
Y大,问个小小问题,
假如原本我已经把数据输入到SAS了,
在WORK中档名叫做a1;
(不需要用datalines 把数据输入),
我想要用set a1,这个方式,输入数据,
那么,以下这部分的语法,应该要如何修改呢?
data Test_F;
   input date yymmdd8. PRC QTY key $  deal $4. ;
    format date date9. time hhmm5.;
   time = hms(substr(deal,1,2),substr(deal,3,2),0);
datalines;
20050602 242.2 1 TE 0904
20050602 242.5 1 TE 0936
20050602 242.8 1 TE 1008
20050603 6022 2 TX 1009
20050603 6023 2 TX 1015
20050830 6075 1 TX 0922
20050831 6049 1 TX 1106
20050909 6146 2 TX 0936
20050926 5936 1 TX 1232
20051003 6162 3 TX 1258
20051013 5972 1 TX 0806
20051025 5789 5 TX 0930
20051025 5789 1 TX 0940
; run;
proc sort data=Test_F;
   by date Time;
run;

小弟不懂,为什么我直接SET a1的数据,
然后用 time = hms(substr(deal,1,2),substr(deal,3,2),0);
去跑,为什么跑出来time都是”.”  (~”~)

然后LOG里面显示
1110  dataa2;

1111  seta1;

1112  time= hms(substr(deal,1,2),substr(deal,3,2),0);

1113  run;

NOTE: Numeric values have been converted tocharacter values at the places given by: (Line):(Column).

     1112:21   1112:38

NOTE: Character values have been converted tonumeric values at the places given by: (Line):(Column).

     1112:14   1112:31

NOTE: Missing values were generated as a resultof performing an operation on missing values.

      Eachplace is given by: (Number of times) at (Line):(Column).

      28 at 1112:10

18
yzsxdlcc 发表于 2013-3-7 16:57:43
楊中 发表于 2013-3-7 15:36
Y大,问个小小问题,
假如原本我已经把数据输入到SAS了,
在WORK中档名叫做a1;
你的数据集a1里面的deal变量是字符型的吗?substr()函数被截取的变量必须为字符型,如果为数值型,自动转化为best12.形式,右对齐,前面补空格。
从骨感走向丰满

文库

19
楊中 发表于 2013-3-7 21:22:19
yzsxdlcc 发表于 2013-3-7 16:57
你的数据集a1里面的deal变量是字符型的吗?substr()函数被截取的变量必须为字符型,如果为数值型,自动转 ...
原来如此,我想也是= = " 所以才会弄出不来。
后来我是用
newtime=put(deal,4.);
time = hms(substr(newtime,1,2),substr(newtime,3,2),0);
这两行,解出来的。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-24 22:31