SAS中文论坛

标题: 计算一下,一共有多少天? (小趣味题) [打印本页]

作者: shiyiming    时间: 2009-12-26 14:57
标题: 计算一下,一共有多少天? (小趣味题)
每年5月最后一个星期一是美国的 Memorial Day , 每年7月4号是美国的独立日.
问题: 在1960年到2000年间,从 Memorial Day 到独立日一共有多少天?
作者: shiyiming    时间: 2009-12-26 16:11
标题: 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]
作者: shiyiming    时间: 2009-12-26 23:21
标题: Re: 计算一下,一共有多少天? (小趣味题)
可否在SAS9.1版本下写?
还有,我下了个SAS9.2多国版,但安装只能中文版,问一下,能不能调成英文版,及如何调.谢谢!
或,哪里有英文版的SAS9.1/9.2下载?谢谢!
作者: shiyiming    时间: 2009-12-27 02:35
标题: 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]
作者: shiyiming    时间: 2009-12-27 10:34
标题: 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]
作者: shiyiming    时间: 2009-12-27 10:55
标题: Re: 计算一下,一共有多少天? (小趣味题)
Thanks hopewell! Very smart idea. <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
作者: shiyiming    时间: 2009-12-27 22:28
标题: 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]
作者: shiyiming    时间: 2009-12-28 10:10
标题: 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日的天数
作者: shiyiming    时间: 2009-12-29 09:14
标题: Re: 计算一下,一共有多少天? (小趣味题)
mod(var2+5,7) 这个是怎么想到的,谁解释下?
作者: shiyiming    时间: 2009-12-29 11:57
标题: Re: 计算一下,一共有多少天? (小趣味题)
人的正确思想是从哪里来的?是从天上掉下来的吗?不是。是自己头脑里固有的吗?不是。人的正确思想,只能从社会实践中来,只能从生产斗争、阶级斗争和科学实验这三项实践中来。---毛泽东
作者: shiyiming    时间: 2009-12-30 03:51
标题: Re: 计算一下,一共有多少天? (小趣味题)
[quote=&quot;ahuige&quot;:2lxvg7lf]人的正确思想是从哪里来的?是从天上掉下来的吗?不是。是自己头脑里固有的吗?不是。人的正确思想,只能从社会实践中来,只能从生产斗争、阶级斗争和科学实验这三项实践中来。---毛泽东[/quote:2lxvg7lf]
<!-- s:mrgreen: --><img src="{SMILIES_PATH}/icon_mrgreen.gif" alt=":mrgreen:" title="Mr. Green" /><!-- s:mrgreen: -->
作者: shiyiming    时间: 2010-1-24 15:40
标题: Re: 计算一下,一共有多少天? (小趣味题)
[quote=&quot;gogotiger&quot;:x7w9ye6k]可否在SAS9.1版本下写?
还有,我下了个SAS9.2多国版,但安装只能中文版,问一下,能不能调成英文版,及如何调.谢谢!
或,哪里有英文版的SAS9.1/9.2下载?谢谢![/quote:x7w9ye6k]

SAS文件夹下边有个文件   SASV9.CFG
用记事本打开 你的应该是
-CONFIG &quot;...\SAS 9.1.3\nls\zh\SASV9.CFG&quot;
把zh改成en,去nls文件夹下边看有没有en这一文件夹 有没有sasv9.cfg文件 如果有应该就可以用了
作者: shiyiming    时间: 2012-7-22 21:51
标题: Re: 计算一下,一共有多少天? (小趣味题)
Mark




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2