SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 697|回复: 5
打印 上一主题 下一主题

请问:如何对一组日期做循环

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-1-5 11:12:47 | 只看该作者

请问:如何对一组日期做循环

数据如下:
date                value
2009-1-9                -7.87
2009-1-9                1.67
2009-1-9                —
2009-1-9                4.94
2009-1-9                -2.15
2009-1-16                -0.77
2009-1-16                -0.1
2009-1-16                0.06
2009-1-16                0.28
2009-1-16                0.35
2009-1-23                -0.58
2009-1-23                0.2
2009-1-23                —
2009-1-23                0.41
2009-1-23                0.83
2009-2-6                5.64
2009-2-6                6.28
2009-2-6                7.84
…                …
2010-8-6                -
2010-8-6                -
2010-8-6                1.09
2010-8-6                1.2
2010-8-6                1.65
现在想做的是,在每一天,如2009-1-9,计算value正数和负数的个数。用循环语句时,日期字符格式是不是要转换成数值格式。谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-1-5 21:56:33 | 只看该作者

Re: 请问:如何对一组日期做循环

字符型的日期比较数值型几乎没有任何的好处。不过,日期格式的变量本是数值型。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-1-6 09:06:15 | 只看该作者

Re: 请问:如何对一组日期做循环

哦,谢谢。那么我如果想对下面这种类似数据在每一天计算它的正负数个数,应该怎么做循环呢?
date value
2009-1-9 -7.87
2009-1-9 1.67
2009-1-9 2.34
2009-1-9 4.94
2009-1-9 -2.15
2009-1-16 -0.77
2009-1-16 -0.1
2009-1-16 0.06
2009-1-16 0.28
2009-1-16 0.35
2009-1-23 -0.58
2009-1-23 0.2
2009-1-23 -1.25
2009-1-23 0.41
2009-1-23 0.83
2009-2-6 5.64
2009-2-6 6.28
2009-2-6 7.84
… …
2010-8-6 -4.56
2010-8-6 -7.98
2010-8-6 1.09
2010-8-6 1.2
2010-8-6 1.65
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-1-6 10:28:34 | 只看该作者

Re: 请问:如何对一组日期做循环

[code:1ui18nqx]data raw;
    input date:yymmdd10. value;
    format date yymmdd10.;
datalines;
2009-1-9 -7.87
2009-1-9 1.67
2009-1-9 2.34
2009-1-9 4.94
2009-1-9 -2.15
2009-1-16 -0.77
2009-1-16 -0.1
2009-1-16 0.06
2009-1-16 0.28
2009-1-16 0.35
2009-1-23 -0.58
2009-1-23 0.2
2009-1-23 -1.25
2009-1-23 0.41
2009-1-23 0.83
2009-2-6 5.64
2009-2-6 6.28
2009-2-6 7.84
2010-8-6 -4.56
2010-8-6 -7.98
2010-8-6 1.09
2010-8-6 1.2
2010-8-6 1.65
;
data out(drop=value);
    plus=0; minus=0;
    do _n_=1 by 1 until(last.date);
        set raw;
        by date;
        if value ge 0 then plus+1;
    end;
    minus=_n_-plus;
run;[/code:1ui18nqx]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2011-1-7 23:58:44 | 只看该作者

Re: 请问:如何对一组日期做循环

[code:2w0mnqvo]title;
data a;
input date : yymmdd10. value;
format date mmddyy10.;
cards;
2009-1-9 -7.87
2009-1-9 1.67
2009-1-9 -8.9
2009-1-9 4.94
2009-1-9 -2.15
2009-1-16 -0.77
2009-1-16 -0.1
2009-1-16 0.06
2009-1-16 0.28
2009-1-16 0.35
2009-1-23 -0.58
2009-1-23 0.2
2009-1-23 -0.7
2009-1-23 0.41
2009-1-23 0.83
2009-2-6 5.64
2009-2-6 6.28
2009-2-6 7.84
;
proc sort;
by datedata;
data b;
set a;
by date;
if first.date then do; pos=0;neg=0;end;
pos+(value>0);
neg+(value<0);
if last.date;
keep date pos neg;
run;
proc print;
run;
[/code:2w0mnqvo]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2011-1-10 20:16:03 | 只看该作者

Re: 请问:如何对一组日期做循环

谢谢hopewell。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-13 18:26 , Processed in 0.069711 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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