SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2307|回复: 12
打印 上一主题 下一主题

计算一下,一共有多少天? (小趣味题)

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-12-26 14:57:52 | 只看该作者

计算一下,一共有多少天? (小趣味题)

每年5月最后一个星期一是美国的 Memorial Day , 每年7月4号是美国的独立日.
问题: 在1960年到2000年间,从 Memorial Day 到独立日一共有多少天?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-12-26 16:11:13 | 只看该作者

Re: 计算一下,一共有多少天? (小趣味题)

建议把题目改成从端午节到中秋节...
CAUTION: 仅在9.2下有效
[code:3uqmnz2p]data _null_;
        do year=1960 to 2000;
                count+datdif(holiday('memorial',year),holiday('usindependence',year),'act/act');
        end;
        if year=2001 then put '回答:一共是' count'天。';
run;[/code:3uqmnz2p]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-12-26 23:21:44 | 只看该作者

Re: 计算一下,一共有多少天? (小趣味题)

可否在SAS9.1版本下写?
还有,我下了个SAS9.2多国版,但安装只能中文版,问一下,能不能调成英文版,及如何调.谢谢!
或,哪里有英文版的SAS9.1/9.2下载?谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-12-27 02:35:56 | 只看该作者

Re: 计算一下,一共有多少天? (小趣味题)

What about this?

[code:3awoqy78]data _null_;
  do year = 1960 to 2000;
    do day = 1 to 31;
      date = mdy(5, day, year);
      if weekday(date) = 2 then MemorialDay = date;
    end;

    IndependenceDay = mdy(7, 4, year);

    daysBetween = intck('day', MemorialDay, IndependenceDay);

    sumDays + daysBetween;
  end;

  put sumDays 'days in total.';
run;
[/code:3awoqy78]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-12-27 10:34:43 | 只看该作者

Re: 计算一下,一共有多少天? (小趣味题)

[code:3l2w9lza]data _null_;
        do year=1960 to 2000;
                date=mdy(7,4,year);
                do until(month(date)=5 and weekday(date)=2);
                        date=date-1;
                        count+1;
                end;
        end;
        put count;
run;[/code:3l2w9lza]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2009-12-27 10:55:19 | 只看该作者

Re: 计算一下,一共有多少天? (小趣味题)

Thanks hopewell! Very smart idea. <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

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

Re: 计算一下,一共有多少天? (小趣味题)

借用一下楼上同学们的框架。试着减少嵌套循环
[code:234z7riz]data _null_;
   do year=1960 to 2000;
      count+(mod(weekday(mdy(5,31,year))+5,7)+34);
   end;
   put count;
run;[/code:234z7riz]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2009-12-28 10:10:40 | 只看该作者

Re: 计算一下,一共有多少天? (小趣味题)

[quote:2xzz5fxh]count+(mod(weekday(mdy(5,31,year))+5,7)+34);[/quote:2xzz5fxh]
var1=mdy(5,31,year): input5月31日的日期值
var2=weekday(var1): 计算5月31日是星期几
var3=mod(var2+5,7): 通过31日是星期几计算周一到31号的天数 <!-- s:shock: --><img src="{SMILIES_PATH}/icon_eek.gif" alt=":shock:" title="Shocked" /><!-- s:shock: --> 这大概就属于江湖中所说的算法了吧
[code:2xzz5fxh]       25日 26日 27日 28日 29日 30日 31日      
情况1   3    4    5    6    7    1   ②   mod(2+5,7)=0
情况2   4    5    6    7    1   ②    3   mod(3+5,7)=1
情况3   5    6    7    1   ②    3    4   mod(4+5,7)=2
情况4   6    7    1   ②    3    4    5   mod(5+5,7)=3
情况5   7    1   ②    3    4    5    6   mod(6+5,7)=4
情况6   1   ②    3    4    5    6    7   mod(7+5,7)=5
情况7  ②    3    4    5    6    7    1   mod(1+5,7)=6[/code:2xzz5fxh]
var4=var3+34: 34是7月4日到6月1日的天数
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2009-12-29 09:14:05 | 只看该作者

Re: 计算一下,一共有多少天? (小趣味题)

mod(var2+5,7) 这个是怎么想到的,谁解释下?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2009-12-29 11:57:50 | 只看该作者

Re: 计算一下,一共有多少天? (小趣味题)

人的正确思想是从哪里来的?是从天上掉下来的吗?不是。是自己头脑里固有的吗?不是。人的正确思想,只能从社会实践中来,只能从生产斗争、阶级斗争和科学实验这三项实践中来。---毛泽东
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-4 00:32 , Processed in 0.090510 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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