看板 NCCU07_SOCIO 關於我們 聯絡資訊
這幾天應該會想辦法修改一下... 此法的優點是 1.列出所有對獎號碼,並按照大小排序 2.語法較為簡單 缺點是 1.因為變項重複的case會刪掉,很難抽到1000個名單來兌獎 2.程式碼很冗長 3.無法自動計算中獎金額和花費 以下是我的步驟 1. 隨機跑6個1~49的數字 跑一千組 INPUT PROGRAM . LOOP id = 1 to 1000. COMPUTE first = trunc(uniform(48))+1 . COMPUTE secend = trunc(uniform(48))+1 . COMPUTE third = trunc(uniform(48))+1 . COMPUTE fourth = trunc(uniform(48))+1 . COMPUTE fifth = trunc(uniform(48))+1 . COMPUTE sixth = trunc(uniform(48))+1 . END CASE . END LOOP . END FILE . END INPUT PROGRAM . 2.然後把依個CASE中有重複數字的CASE刪掉... USE ALL. SELECT IF(first ~= secend & first ~= third & first ~= fourth & first ~= fifth & first ~= sixth & secend ~= third & secend ~= fourth & secend ~= fifth & secend ~= sixth & third ~= fourth & third ~= fifth & third ~= sixth & fourth ~= fifth & fourth ~= sixth & fifth ~= sixth). EXECUTE . 3.然後開始按數字大小排順序 a.先把最小的排出來 COMPUTE n_first = MIN(first,secend,third,fourth,fifth,sixth) . EXECUTE . b.刪掉最小的數字 DO IF (first>n_first) . RECODE first (ELSE=Copy) INTO temp1 . END IF . DO IF (secend>n_first) . RECODE secend (ELSE=Copy) INTO temp2 . END IF . DO IF (third>n_first) . RECODE third (ELSE=Copy) INTO temp3 . END IF . DO IF (fourth>n_first) . RECODE fourth (ELSE=Copy) INTO temp4 . END IF . DO IF (fifth>n_first) . RECODE fifth (ELSE=Copy) INTO temp5 . END IF . DO IF (sixth>n_first) . RECODE sixth (ELSE=Copy) INTO temp6 . END IF . c.從剩下的五個數字中 選出最小的 COMPUTE n_secend = MIN(temp1,temp2,temp3,temp4,temp5,temp6) . EXECUTE . 剩下因為程式碼過於冗長 就不貼了 囧 4.然後把case依順序排好 SORT CASES BY n_first (A) n_secend (A) n_third (A) n_fourth (A) n_fifth (A) n_sixth (A) . 目的是方便人工刪除重複的case 5.計算中獎的次數 a.未包括特別號,抽樣結果六個數字與開獎號碼相同的次數 COUNT win1 = n_first n_secend n_third n_fourth n_fifth n_sixth (1) n_first n_secend n_third n_fourth n_fifth n_sixth (16) n_first n_secend n_third n_fourth n_fifth n_sixth (24) n_first n_secend n_third n_fourth n_fifth n_sixth (31) n_first n_secend n_third n_fourth n_fifth n_sixth (35) n_first n_secend n_third n_fourth n_fifth n_sixth (39) . EXECUTE . b.計算中獎次數(包括特別號),六個數字與開獎號碼相同的次數 6.計算中普獎的次數 DO IF (win1 = 3) . COUNT win_nom = win1 (3) . END IF . EXECUTE . 7.計算中六獎的次數(因為有特別號比沒有特別號多一個對獎數字, 所以只須計算中了特別號次數的比沒有特別號還要大的case即可) DO IF (win2 > win1) . COUNT win_6 = win2 (4) . END IF . EXECUTE . 8.剩下獎項類推 DO IF (win1 = 4) . COUNT win_5 = win1 (4) . END IF . EXECUTE . DO IF (win2 > win1) . COUNT win_4 = win1 (5) . END IF . EXECUTE . DO IF (win1 = 5) . COUNT win_3 = win1 (5) . END IF . EXECUTE . DO IF (win2 > win1) . COUNT win_2 = win1 (6) . END IF . EXECUTE . DO IF (win1 = 6) . COUNT win_1 = win1 (6) . END IF . EXECUTE . 9.寫報告 列出對獎樂透的數量以及各種獎項的數量 SUMMARIZE /TABLES=id /FORMAT=NOLIST TOTAL /TITLE='Case Summaries' /MISSING=VARIABLE /CELLS=COUNT . Report /FORMAT= CHWRAP(ON) PREVIEW(OFF) CHALIGN(BOTTOM) UNDERSCORE(ON) ONEBREAKCOLUMN(OFF) CHDSPACE(1) SUMSPACE(0) AUTOMATIC NOLIST BRKSPACE(0) PAGE(1) MISSING'.' LENGTH(1, 59) ALIGN(LEFT) TSPACE(1) FTSPACE(1) MARGINS(1,83) /TITLE= RIGHT 'Page )PAGE' /VARIABLES win_nom (VALUES) (RIGHT) (OFFSET(0)) (10) win_6 (VALUES) (RIGHT) (OFFSET(0)) (10) win_5 (VALUES) (RIGHT) (OFFSET(0)) (10) win_4 (VALUES) (RIGHT) (OFFSET(0)) (10) win_3 (VALUES) (RIGHT) (OFFSET(0)) (10) win_2 (VALUES) (RIGHT) (OFFSET(0)) (10) win_1 (VALUES) (RIGHT) (OFFSET(0)) (10) /BREAK (TOTAL) 'Grand Total' (SKIP(1)) /SUMMARY SUM( win_nom) SKIP(1) SUM( win_6 ) SUM( win_5 ) SUM( win_4 ) SUM( win_3 ) SUM( win_2 ) SUM( win_1 ) 'Sum' . -- http://www.wretch.cc/album/kenshin528 <=這是美女相簿 網路日誌 http://www.wretch.cc/blog/kenshin528 (C)lass 【 分組討論區 】 11 卡漫夢工廠 卡通, 漫畫, 動畫 [Ckmike] 4 C_J_Artist 作家 Σ日本漫畫家專區 [Ckmike] 10 TakahasiShin 作家 ◎****高橋真作品討論版**** kenshin528 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.231.229.88 ※ 編輯: kenshin528 來自: 125.231.229.88 (09/24 15:58) ※ 編輯: kenshin528 來自: 125.231.229.88 (09/24 15:58)
kenshin528:要怎樣手抖一抖就出來阿 囧~ 09/24 16:09
FFWillie:如果刪掉有重複的組那不到1000組怎麼辦阿? 09/24 16:36
FFWillie:是一直跑到1000組都沒有重複嘛? 09/24 16:40
kenshin528:不會處理 囧... 09/24 21:24
kenshin528:我沒辦法跑出1000組... 09/24 21:49
happyyaya:"計數(count)"是個好東西 可以用來對獎 比較簡單又快 09/24 23:02
cragehsu:ㄟ我不懂耶,為什麼要care重複的組別? 09/25 23:54
cragehsu:電腦選號不是也會重複嗎? 09/25 23:55