楼主: Imasasor
3664 19

[学习分享] 我们一起抽奖吧!!怎么用sas做抽奖程序? [推广有奖]

  • 1关注
  • 64粉丝

VIP

学科带头人

34%

还不是VIP/贵宾

-

TA的文库  其他...

超哥喜欢的文章

威望
1
论坛币
47033 个
通用积分
3.1376
学术水平
238 点
热心指数
246 点
信用等级
231 点
经验
36380 点
帖子
866
精华
3
在线时间
2234 小时
注册时间
2012-7-4
最后登录
2023-9-20

初级学术勋章 初级热心勋章 初级信用勋章 中级热心勋章 中级学术勋章

500论坛币

年末了,各种新年晚会,节目精彩纷呈,其中少不了的是抽奖环节,现在很多抽奖都用程序自动抽奖,
主持人喊开始,程序自动运行,滚动显示奖券号码,主持人喊停,滚动停止,显示中奖号码,这是一个随机的过程。

这是一个很简单的计算机程序,可能很多语言都可以写。

现在想一起,能不能用sas也实现上述随机抽奖过程,sas利用随机数随机挑取数据并不难,但问题是如何能在界面显示上也类同于抽奖程序界面显示,好像不是很好弄,特来求助高手

现假设场景如下:
共500名观众,有500张奖券,要抽三轮奖:阳光普照奖(10名),新年快乐奖(5名),特等奖(1名)
如何实现以下内容:
1、利用sas宏程序,两个宏参数分别为抽奖类型(上述三个)和抽奖名额(可以自己设定)。
2、运行程序之后,怎么与windows系统设置接口,使得点击鼠标或按回车键(不管如何,反正是人为发出指令),让随机过程开始,并能够在屏幕显示模拟抽奖过程的号码滚动界面,当再次人为给出指令,滚动停止,随机选择出中奖名单,通过ods显示出来:阳光普照奖:101 25 302.......
3、是否可通过插入图片等方法使得显示的中奖名单界面更美观漂亮?
第二,在抽完第一轮的奖之后,要把已经抽到奖的名单排除掉,再抽下一轮的,也就是说,只要运行过三等奖的程序,
就要把中奖的10个人去掉,运行二等奖时只有490人,一等奖的sample只有485人。

这个应该不是sas的强项,但不知道sas能不能做出来这种效果?请各位高手尝试一下,悬赏会给做得最好的人。
为了我和新手学习,请高手尽量对程序作注释。
祝各位新年中大奖。



最佳答案

pobel 查看完整内容

用WINDOW和DISPLAY语句试了一下,不能控制什么时候结束。 各位高手,小心砖头。 (不小心上传了两个同样的图片,不知道怎么删掉了)
关键词:Windows Sample Window SAS宏程序 计算机程序 程序 抽奖 计算机程序 中奖号码 如何
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
davil2000 + 5 + 5 + 5 对论坛有贡献

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

本帖被以下文库推荐

欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;
沙发
pobel 在职认证  发表于 2013-1-4 18:47:29 |只看作者 |坛友微信交流群
用WINDOW和DISPLAY语句试了一下,不能控制什么时候结束。
各位高手,小心砖头。

(不小心上传了两个同样的图片,不知道怎么删掉了)
  1. *** total number of applicants;
  2. %let total=500;

  3. data _null_;
  4.         length  sunshines happy2013 urspecial message cong $50 already $200;

  5.         *** Defines the Window;
  6.         window brick_throwing color=red rows=30 columns=80
  7.            #5  @18 '******************************************' color=yellow
  8.            #7  @18 '  SASors on Pinggu.org,  Happy New Year!  ' color=yellow
  9.            #9  @18 '******************************************' color=yellow

  10.            # 14 @10 'Prize Type:  ' attr=underline  color=yellow
  11.                     +10 'Winner:                                  '      attr=underline color=yellow

  12.            # 15 @12 'Sun Shines  ' color=yellow
  13.                     +10 Sunshines color=yellow protect=yes

  14.            # 16 @12 'Happy 2013  ' color=yellow
  15.                     +10 Happy2013 color=yellow protect=yes

  16.            # 17 @12 'U R Special ' color=yellow
  17.                     +10 URSpecial color=yellow protect=yes

  18.            # 20 @30 cong  color=yellow protect=yes
  19.            # 22 @18 message color=cyan protect=Yes;

  20.            message="Please press ENTER to start.";

  21.         *** Display the window and ask the user to press ENTER;
  22.         display brick_throwing blank;
  23.         link pause ;

  24.         *** Sun shines prize;
  25.         do i=1 to 20 ;
  26.                call missing(already);
  27.                call missing(sunshines);
  28.                 *** Get 10 different obs numbers and concatenate them;
  29.                 number=0;
  30.                do until (number=10);
  31.                    tmp=ceil(ranuni(0)*&total);
  32.                    if not indexw(already,cats(tmp)) then do;
  33.                           number+1;
  34.                           already=catx(" ",already,tmp);
  35.                           sunshines=catx(" ",sunshines,tmp);
  36.                    end;            
  37.                 end;
  38.                 *** Display the process of drawing "Sun shines prize";
  39.                 display brick_throwing noinput;
  40.                 link pause ;
  41.      end;

  42.         *** Happy 2013;
  43.         do i=1 to 20 ;
  44.                *** put "Sun shines" winners to the "Black list";
  45.                already=sunshines;
  46.                 call missing(happy2013);
  47.                 *** Get 5 different obs numbers;
  48.                 number=0;
  49.                do until (number=5);
  50.                      tmp=ceil(ranuni(0)*&total);
  51.                      if not indexw(already,cats(tmp)) then do;
  52.                              number+1;
  53.                              already=catx(" ",already,tmp);
  54.                              happy2013=catx(" ",happy2013,tmp);
  55.                      end;            
  56.                 end;         
  57.                 *** display the process for "happy 2013";
  58.                 display brick_throwing noinput;
  59.                 link pause ;
  60.       end;

  61.         *** U R Special;
  62.         do i=1 to 20 ;
  63.             *** make winners invalid for new prize;
  64.             already=catx(" ",sunshines,happy2013);
  65.             do until (flag=0);
  66.                          tmp=ceil(ranuni(0)*&total);
  67.                          flag=indexw(already,cats(tmp));
  68.                 end;
  69.              urspecial =cats(tmp);
  70.                *** Display the process of the last prize;
  71.                 display brick_throwing noinput;
  72.                 link pause ;
  73.         end ;

  74.    *** wait for 1 second and congratulate the winners;
  75.     do i=1 to 10; link pause; end;
  76.     cong="Congratulations!!!";
  77.     *** press ENTER to close;
  78.    message="Please press Enter to close the window.";
  79.    display brick_throwing blank;
  80.    stop;

  81.   *** Useful for the "rolling" effect;
  82.   pause:
  83.          now=time() ;
  84.          do while((now+0.1)>time()) ;
  85.          end ;
  86. run;
复制代码

Capture.JPG (43.76 KB)

Capture.JPG

Capture.JPG (43.76 KB)

Capture.JPG

已有 6 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
guo.bailing + 100 + 5 + 5 + 5 精彩帖子
新人2012 + 1 + 1 + 1 神一般的人物
老师她摸我 + 1 + 1 + 1 膜拜
webgu + 1 + 1 + 1 精彩帖子
ziyenano + 1 + 1 + 1 灰常NB
Imasasor + 60 + 60 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 160  论坛币 + 60  学术水平 + 14  热心指数 + 14  信用等级 + 14   查看全部评分

和谐拯救危机

使用道具

藤椅
davil2000 发表于 2013-1-5 09:09:40 |只看作者 |坛友微信交流群
Imasasor热心公益啊!以后不要再和坛友发生激烈争执了 O(∩_∩)O~
R是万能的,SAS是不可战胜的!

使用道具

板凳
ziyenano 发表于 2013-1-5 09:52:57 |只看作者 |坛友微信交流群
期待SCL/AF 模块的高手,SAS的开发语言确实不懂

使用道具

ziyenano 发表于 2013-1-5 09:52
期待SCL/AF 模块的高手,SAS的开发语言确实不懂
一定需要SCL语言来开发吗

使用道具

地板
ziyenano 发表于 2013-1-5 11:47:24 |只看作者 |坛友微信交流群
数据分析师3K 发表于 2013-1-5 11:37
一定需要SCL语言来开发吗
貌似9.3的PROC GROOVY能够调用java,但是也不知道能不能在sas里用java开发?
不过我觉得期待一个会java的高手会比期待SAS开发高手更靠谱一点~
话又说回来,能够懂SAS又懂java的,好像也不多~
PS:只是自己一点缪论,对开发这块一窍不通
已有 1 人评分信用等级 收起 理由
数据分析师3K + 2 观点有启发

总评分: 信用等级 + 2   查看全部评分

使用道具

7
gdyxylj 发表于 2013-1-5 11:48:08 |只看作者 |坛友微信交流群
呵呵,很有趣啊,SAS果然强大无比~~~

使用道具

8
webgu 发表于 2013-1-5 12:42:54 |只看作者 |坛友微信交流群
ziyenano 发表于 2013-1-5 09:52
期待SCL/AF 模块的高手,SAS的开发语言确实不懂
要开发界面的话,应该要用SCL/AF模块, 但是搞SCL语言的人很少。早期,SAS中文论坛里还有一些人做,现在不知道我们这个论坛里有人做没?
已有 1 人评分学术水平 收起 理由
数据分析师3K + 1 分析的有道理

总评分: 学术水平 + 1   查看全部评分

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

9
ziyenano 发表于 2013-1-5 12:49:28 |只看作者 |坛友微信交流群
webgu 发表于 2013-1-5 12:42
要开发界面的话,应该要用SCL/AF模块, 但是搞SCL语言的人很少。早期,SAS中文论坛里还有一些人做,现在不 ...
webgu兄可有研究?我是一窍不通,静待高手

使用道具

10
webgu 发表于 2013-1-5 13:01:00 |只看作者 |坛友微信交流群
数据分析师3K 发表于 2013-1-5 11:37
一定需要SCL语言来开发吗
如是不用SCL的话,用windows语句可以尝试。


data _null_;
   format ttype vtype 1.0;
   window  sample  color=red rows=24 columns=80 irow=1 icolumn=1
       group=sample

   #6  @28 '/************************** ********************\' color=yellow
   #10  @28 '|**********  新年快乐,欢乐抽奖!************* ***|' color=yellow  
   #14  @28 '\******************** **************************/' color=yellow

   #18 @30 '选择抽奖类型' color=yellow  @80 vtype color=white

   #24 @32 '1: 特等奖  ' color=yellow / /
          @32 '2: 新年快乐奖  ' color=yellow/ /
                  @32 '3: 阳光普照奖  ' color=yellow;
  

  if _n_=2 then stop;
  display sample.sample;

  call symput('vtype',vtype);
  return;
run;



Unnamed QQ Screenshot20130105125303.png (3.28 KB)

Unnamed QQ Screenshot20130105125303.png

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ziyenano + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-26 00:56