全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1529 8
2012-08-10
悬赏 5 个论坛币 已解决
number                 date
600203                2012-01-01
600203                2012-01-15
600204                2012-01-14
600205                2012-01-04
600205                2012-01-19
600206                2012-01-03
600206                2012-01-28
600207                2012-01-05
600208                2012-01-09
;

要求输出结果:

number                 date1                  date2            date3           date4     ……  平均周期
600203                2012-01-01      2012-01-15
600204                2012-01-14
600205                2012-01-04      2012-01-19
600206                2012-01-03      2012-01-28
600207                2012-01-05
600208                2012-01-09
;
平均周期=mean(date i - date i-1);

尝试用宏编程如下,但是系统报错。

%macro xx;
data a.tt12;
set a.tt11;
do i=4 to &n. by 1;
array col col_1-col_n;
averagezhouqi=mean(col_(n)-col_(n-1));
end;
run;
%mend;
%xx;

请高手指点迷津。
二维码

扫码加我 拉你入群

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

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

全部回复
2012-8-10 15:30:14
复制代码
二维码

扫码加我 拉你入群

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

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

2012-8-10 16:42:04
data a;
length date $12.;
input number $ date $  @;
cards;
600203                2012-01-01
600203                2012-01-15
600203                2012-01-25
600203                2012-01-28
600204                2012-01-14
600205                2012-01-04
600205                2012-01-19
600206                2012-01-03
600206                2012-01-13
600206                2012-01-28
600207                2012-01-05
600208                2012-01-09
;
run;
proc sort data=a out=b;
        by number date;
run;
data c;
    set b;
        date=compress(cats(date),,"kd");
        by number;
        retain flag;
        if first.number then flag=0;
        flag+1;
        if flag=1 then date1=date;
        if flag=2 then date2=date;
        if flag=3 then date3=date;
        if flag=4 then date4=date;
run;
data d1(drop=date2 date3 date4 flag);
        set c;
        if date1^="";
run;
data d2(drop=date1 date3 date4 flag);
        set c;
        if date2^="";
run;
data d3(drop=date1 date2 date4 flag);
        set c;
        if date3^="";
run;
data d4(drop=date1 date2 date3 flag);
        set c;
        if date4^="";
run;
data d5;
        merge d1 d2 d3 d4;
        by number;
run;

data final;
        set d5;
        by number;
        averagezhouqi=mean(of date1-date4);
        ave=int(averagezhouqi);
        format ave ddmmyy10.;
run;

看看行不行,不知道你具体要求的mean是什么情况。
二维码

扫码加我 拉你入群

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

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

2012-8-10 17:01:59
mean是求平均值,还有date有96个,所以一定要写循环。
二维码

扫码加我 拉你入群

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

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

2012-8-10 17:02:38
binyehan 发表于 2012-8-10 16:42
data a;
length date $12.;
input number $ date $  @;
mean是求平均值,还有date有96个,所以一定要写循环。
二维码

扫码加我 拉你入群

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

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

2012-8-10 17:33:24
data tt11;
        format number $10.
                   edit_date date9.
                   date $10.;
        input number $ date $;
        edit_date = input(date, yymmdd10.);
cards;
600203 2012-01-01
600203 2012-01-15
600203 2012-02-01
600204 2012-01-14
600205 2012-01-04
600205 2012-01-19
600206 2012-01-03
600206 2012-01-28
600207 2012-01-05
600208 2012-01-09
;run;
proc sql;
        select max(cnt) into: n
                from (select number, count(*) as cnt
                        from tt11
                        group by 1);
quit;
proc sort data = tt11;
        by number edit_date;
run;
data tt12(drop = i id edit_date date);
        array col{&n.};
        retain col;
        set tt11;
        by number;
        if first.number then do;
                do i = 1 to &n.;
                        col{i} = '';
                end;
                id = 0;
        end;
        id + 1;
        col{id} = edit_date;
        if last.number then do;
                mean_val = ( col{id}-col{1} ) / id;
                output;
        end;
run;

二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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