SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

楼主: shiyiming
打印 上一主题 下一主题

SAS程序员测试(二)

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
31#
 楼主| 发表于 2006-3-12 22:18:18 | 只看该作者

我也试试

请各位指教,谢谢。这个我用了transpose,我也没有考虑其变量数的约束。先run了下,接下来我在学学其他的方法。

proc sort data=tem;
by vol ;

proc transpose data=tem out=tem(drop=_name_);
by vol id;
run;
data tem(keep=vol from id to);
set tem;
array arr _numeric_;
from=arr(2); /* Here consider variable "vol" is numeric.*/
do i=1 to dim(arr);
  if arr(i)^=0 then do;
      to=arr(i);
      leave;
  end;
format to:ddmmyy10.
format from:ddmmyy10.
output;
end;
run;
proc print data=tem; run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
32#
 楼主| 发表于 2009-7-26 16:43:11 | 只看该作者

Re: SAS程序员测试(二)

这是我的程序。 <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
[code:1u2qw26w]proc sort data=tem;
by id vol;
run;
proc means data=tem;
by id vol;
var date;
output out=tem_result min(date)=sdate max(date)=edate;
run;[/code:1u2qw26w]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
33#
 楼主| 发表于 2009-7-27 11:12:12 | 只看该作者

Re: SAS程序员测试(二)

data aa(drop=garote);
set tem;
retain flag 1;
garote=lag(vol);
if garote^=vol then flag+1;
run;

proc sql;
     select distinct vol,id, min(date) as startdate, max(date) as enddate
         from aa
         group by id,flag
         order by id,flag;
quit;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
34#
 楼主| 发表于 2009-7-27 22:28:28 | 只看该作者

Re: SAS程序员测试(二)

Its my code below,You can do this by using the OUTPUT statement in PROC MEANS to create the data set incloud the summarized variables like min &amp; max of date(tem2).
Then,just select the variables and observations which you need(tem3).
[code:1o9d899k]
data tem;
input id&#58;$1&#46; date&#58;yymmdd10&#46; vol;
format date yymmdd10&#46;;
cards;
0 20020101 0
1 20020101 10
1 20020102 10
1 20020103 10
1 20020108 9
1 20020109 9
1 20020110 9
2 20020101 9
2 20020102 8
2 20020103 14
2 20020104 8
2 20020108 11
2 20020109 11
2 20020110 12
;

proc means data=tem min max noprint;
class id vol;
var date;
output out=tem2
          min=sdate
          max=edata;
run;

data tem3(keep=id sdate edata vol);set tem2;
        where id gt '' and vol ge 0;
run;
[/code:1o9d899k]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
35#
 楼主| 发表于 2009-7-31 04:42:58 | 只看该作者

Re: SAS程序员测试(二)

[code:3f4z5q7i]
proc sort data=tem;
  by id  date vol;
run;

data new;
  retain id s_date e_date vol;
  set tem;
  by id vol notsorted;
  if first&#46;vol then s_date=date;
  if last&#46;vol then do;
   e_date=date;
   output; end;
  format  s_date e_date yymmdd10&#46;;
  drop date;
run; [/code:3f4z5q7i]
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 21:35 , Processed in 0.067656 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表