<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Simulating card draws with specific requirements in SAS/IML Software and Matrix Computations</title>
    <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Simulating-card-draws-with-specific-requirements/m-p/225323#M2297</link>
    <description>&lt;P&gt;I don't really have time to answer all your questions, but here are a few thoughts. that might help:&lt;/P&gt;&lt;P&gt;0) You define the variable k to mean two different things. Delete the line k = ceil( Max*u );&lt;/P&gt;&lt;P&gt;1) Use the ELEMENT function to see whether a deal contains specified cards. The &lt;A href="http://blogs.sas.com/content/iml/2015/05/11/loc-element-trick.html" target="_self"&gt;"loc-element technique"&lt;/A&gt;&amp;nbsp;might be useful if you need to know the positions of the cards in the hand.&lt;/P&gt;&lt;P&gt;2) You need to enclose "**bleep**" in quotes when defining the deck.&lt;/P&gt;&lt;P&gt;3) To add cards to the deck, use the vertical concatenation operator (//).&amp;nbsp; To remove cards from the deck, use subscripts or the REMOVE function.&lt;/P&gt;&lt;P&gt;4) I would break this problem into smaller subroutines and define modules to handle each subtask. For example Dea(), DrawCards(), ReturnCards(), Play1Game(), ResetDeck(), Shuffle(), etc. Presumably the deck would be an argument to these functions.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;HTH, Good luck!&lt;/P&gt;</description>
    <pubDate>Sun, 13 Sep 2015 19:22:48 GMT</pubDate>
    <dc:creator>Rick_SAS</dc:creator>
    <dc:date>2015-09-13T19:22:48Z</dc:date>
    <item>
      <title>Simulating card draws with specific requirements</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Simulating-card-draws-with-specific-requirements/m-p/225042#M2285</link>
      <description>&lt;P class="p1"&gt;I would like to write a program for the following card draw problem:&lt;/P&gt;&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;Variables:&lt;/P&gt;&lt;P class="p2"&gt;N = Number of games to simulate.&lt;/P&gt;&lt;P class="p1"&gt;T = number of turns each game has.&lt;/P&gt;&lt;P class="p1"&gt;Results = A matrix of N*(6+T);&lt;/P&gt;&lt;P class="p1"&gt;&lt;SPAN class="Apple-converted-space"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;Col1-4 - The number of cards in the initial hand (Col6 could be empty in cases where we draw 3 cards)&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p1"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;COL5 - 3/4 Depending on the outcome&lt;/P&gt;&lt;P class="p1"&gt;&amp;nbsp; COL6 - N&lt;/P&gt;&lt;P class="p1"&gt;&amp;nbsp;&amp;nbsp;Col7-and on - Cards drawn in turn T.&lt;/P&gt;&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;1. From a deck of 20 "cards" - pick, without replacement, either 3 or 4 cards (chosen&amp;nbsp;randomly with a probability of 50%)&lt;/P&gt;&lt;P class="p1"&gt;2. Of the 3 or 4 cards drawn, keep 0-3 (or 4) based on some algorithm. In the example below&amp;nbsp;i choose to keep ONE copy of David and Jacob.&lt;/P&gt;&lt;P class="p1"&gt;3. Return the cards you do not keep back to the deck.&lt;/P&gt;&lt;P class="p1"&gt;4. Redraw cards, without replacement. The number of cards in the second draw is either 3 or 4 minus the cards I kept.&lt;/P&gt;&lt;P class="p1"&gt;5. Record the final hand in a matrix that is N*6, which includes cards you kept (if any) and the cards i redrew. (The matrix should record the 3 or 4 cards that are in the final hand (step 6)&lt;/P&gt;&lt;P class="p1"&gt;6. Update the deck to consist of the full original deck minus the cards that are&amp;nbsp;kept in the final hand (step 5).&lt;/P&gt;&lt;P class="p1"&gt;7. Start drawing cards, one at a time per turn. Do that for T turns&amp;nbsp;(e.g. 4).&lt;/P&gt;&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;Notes:&lt;/P&gt;&lt;P class="p1"&gt;Some cards can be duplicates. Notice that David, Andy, Jacob,Anne,Doug, **bleep** and Jennifer appear twice in the initial deck.&lt;/P&gt;&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;I started putting together some code. Admittedly, my IML skills are rusty. I am sure there must be a far more elegant implementation.&amp;nbsp;&lt;/P&gt;&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;I am having trouble with:&lt;/P&gt;&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;1. incorporating vector K (the cards i keep) into the code.&lt;/P&gt;&lt;P class="p1"&gt;2. Smart-coding step 3 above - where i update the deck based on the cards kept.&lt;/P&gt;&lt;P class="p1"&gt;3. cases where i keep more than 2 cards.&lt;/P&gt;&lt;P class="p1"&gt;4. I am having trouble with updating the deck so that it will not have the cards that are held in the final hand.&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;5. Putting Numeric values in Col5 and 6 of Results&lt;/P&gt;&lt;P class="p1"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;Thanks for your help.&lt;/P&gt;&lt;P class="p1"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;proc&lt;/STRONG&gt; &lt;STRONG&gt;iml&lt;/STRONG&gt;&lt;SPAN class="s1"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p2"&gt;&lt;SPAN class="s1"&gt;N = &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;&lt;STRONG&gt;10&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;; &lt;/SPAN&gt;/* the number of games to play */&lt;/P&gt;&lt;P class="p2"&gt;&lt;SPAN class="s1"&gt;deck_size = &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;&lt;STRONG&gt;20&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;; &lt;/SPAN&gt;/* the number of cards in the deck */&lt;/P&gt;&lt;P class="p2"&gt;&lt;SPAN class="s1"&gt;T=&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;&lt;STRONG&gt;2&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;; &lt;/SPAN&gt;/** the number of turns **/&lt;/P&gt;&lt;P class="p2"&gt;&lt;SPAN class="s1"&gt;k={David Jacob}; &lt;/SPAN&gt;/** the cards to keep**/&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2"&gt;/* create a deck of 30 playing cards */&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;deck=shape({&lt;/P&gt;&lt;P class="p4"&gt;David&lt;/P&gt;&lt;P class="p4"&gt;David&lt;/P&gt;&lt;P class="p4"&gt;Jacob&lt;/P&gt;&lt;P class="p4"&gt;Jacob&lt;/P&gt;&lt;P class="p4"&gt;Helen&lt;/P&gt;&lt;P class="p4"&gt;Jennifer&lt;/P&gt;&lt;P class="p4"&gt;Jennifer&lt;/P&gt;&lt;P class="p4"&gt;Jeff&lt;/P&gt;&lt;P class="p4"&gt;Andy&lt;/P&gt;&lt;P class="p4"&gt;Andy&lt;/P&gt;&lt;P class="p4"&gt;Anne&lt;/P&gt;&lt;P class="p4"&gt;Anne&lt;/P&gt;&lt;P class="p4"&gt;Sophia&lt;/P&gt;&lt;P class="p4"&gt;Rick&lt;/P&gt;&lt;P class="p4"&gt;Doug&lt;/P&gt;&lt;P class="p4"&gt;Doug&lt;/P&gt;&lt;P class="p4"&gt;John&lt;/P&gt;&lt;P class="p4"&gt;**bleep**&lt;/P&gt;&lt;P class="p4"&gt;**bleep**&lt;/P&gt;&lt;P class="p4"&gt;Brian},&lt;SPAN class="s2"&gt;&lt;STRONG&gt;20&lt;/STRONG&gt;&lt;/SPAN&gt;,&lt;SPAN class="s2"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;Results = j(N, &lt;SPAN class="s2"&gt;&lt;STRONG&gt;6&lt;/STRONG&gt;&lt;/SPAN&gt;, BlankStr(nleng(Deck)));&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;do&lt;/SPAN&gt; game=&lt;SPAN class="s2"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class="s3"&gt;to&lt;/SPAN&gt; N;&lt;/P&gt;&lt;P class="p2"&gt;/*** decide on the cards drawn **/&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;call&lt;/SPAN&gt; randgen(u, &lt;SPAN class="s4"&gt;"Uniform"&lt;/SPAN&gt;);&lt;/P&gt;&lt;P class="p4"&gt;Max = &lt;SPAN class="s2"&gt;&lt;STRONG&gt;4&lt;/STRONG&gt;&lt;/SPAN&gt;;&lt;/P&gt;&lt;P class="p2"&gt;&lt;SPAN class="s1"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;k = ceil( Max*u );&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* uniform integer in 1..Max */&lt;/P&gt;&lt;P class="p4"&gt;Min = &lt;SPAN class="s2"&gt;&lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/SPAN&gt;;&lt;/P&gt;&lt;P class="p2"&gt;&lt;SPAN class="s1"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;n = floor( (&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;+Max)*u ); &lt;/SPAN&gt;/* uniform integer in 0..Max */&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;draw = min + floor( (&lt;SPAN class="s2"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;+Max-Min)*u ); &lt;SPAN class="s5"&gt;/* uniform integer in Min..Max */&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; draw;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2"&gt;&lt;SPAN class="s1"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* choose 3/4 cards without replacement from deck */&lt;/P&gt;&lt;P class="p2"&gt;/*call randseed(5,0,);*/&lt;/P&gt;&lt;P class="p2"&gt;&lt;SPAN class="s1"&gt;deal1 = sample(deck, draw, &lt;/SPAN&gt;&lt;SPAN class="s4"&gt;"WOR"&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;);&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/* sample 4 cards without replacement */&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; deal1;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2"&gt;/** mulligan rules **/&lt;/P&gt;&lt;P class="p2"&gt;/*** keep elements of deal1 if they are either David or Jacob; but only 1 of each&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;**/&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2"&gt;&lt;SPAN class="s1"&gt;i = loc(deal1 =&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;"DAVID"&lt;/SPAN&gt;&lt;SPAN class="s1"&gt; | deal1=&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;"JACOB"&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;); &lt;/SPAN&gt;/** i hard code here, because i am not sure how to implement the K vector i define above. I would like to get rid of the caps **/&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;if&lt;/SPAN&gt; IsEmpty(i) &lt;SPAN class="s3"&gt;then&lt;/SPAN&gt; do;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p5"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; "i is empty"&lt;SPAN class="s1"&gt;;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p4"&gt;nkeep = nrow(i);&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; nkeep;&lt;/P&gt;&lt;P class="p4"&gt;draw2=draw-nkeep;&lt;/P&gt;&lt;P class="p2"&gt;&lt;SPAN class="s1"&gt;deck1=deck; &lt;/SPAN&gt;/** update the deck from which to draw on the second trial**/&lt;/P&gt;&lt;P class="p6"&gt;end&lt;SPAN class="s1"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;else&lt;/SPAN&gt; &lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;do;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p5"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; "i is not empty"&lt;SPAN class="s1"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p6"&gt;print&lt;SPAN class="s1"&gt; i;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;keepa = deal1[i];&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; keepa;&lt;/P&gt;&lt;P class="p2"&gt;/*** keep only ONE copy of Jacob or David; i would like to alos have an option to keep two copies of David**/&lt;/P&gt;&lt;P class="p4"&gt;keep=unique(keepa);&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; keep;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;nkeep=countn(keep);&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; deal1;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; keepa;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; keep;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; nkeep;&lt;/P&gt;&lt;P class="p4"&gt;draw2=draw-nkeep;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; draw2;&lt;/P&gt;&lt;P class="p2"&gt;/** Return the cards not kept back to the deck - or reduce the deck by the cards kept **/&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;if&lt;/SPAN&gt; nkeep&amp;gt;&lt;SPAN class="s2"&gt;&lt;STRONG&gt;0&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class="s3"&gt;then&lt;/SPAN&gt; do;&lt;/P&gt;&lt;P class="p2"&gt;/*locate the index in deck of the elements of keep;*/&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;if&lt;/SPAN&gt; nkeep=&lt;SPAN class="s2"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class="s3"&gt;then&lt;/SPAN&gt; do;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;j = loc(deck=keep[&lt;SPAN class="s2"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;,&lt;SPAN class="s2"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;]);&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;if&lt;/SPAN&gt; ncol(j) &amp;gt; nkeep &lt;SPAN class="s3"&gt;then&lt;/SPAN&gt; do;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;j=remove(j,&lt;SPAN class="s2"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;);&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;end&lt;/SPAN&gt;;&lt;/P&gt;&lt;P class="p6"&gt;end&lt;SPAN class="s1"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2"&gt;&lt;SPAN class="s3"&gt;if&lt;/SPAN&gt;&lt;SPAN class="s1"&gt; nkeep=&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;&lt;STRONG&gt;2&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class="s3"&gt;then&lt;/SPAN&gt;&lt;SPAN class="s1"&gt; do; &lt;/SPAN&gt;/*** i am hard coding here because i am not sure how to implement the k vector**/&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;j = loc(deck=&lt;SPAN class="s4"&gt;"DAVID"&lt;/SPAN&gt;|deck=&lt;SPAN class="s4"&gt;"JACOB"&lt;/SPAN&gt;);&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;if&lt;/SPAN&gt; ncol(j) &amp;gt; nkeep &lt;SPAN class="s3"&gt;then&lt;/SPAN&gt; do;&lt;/P&gt;&lt;P class="p2"&gt;&lt;SPAN class="s1"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;j=remove(j,{&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class="s2"&gt;&lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;}); &lt;/SPAN&gt;/**8 this is hard-coded because i am not sure how to do this step correctly **/&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;end&lt;/SPAN&gt;;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; j;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p6"&gt;end&lt;SPAN class="s1"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2"&gt;/** not coding yet the cases where nkeep&amp;gt;2 **/&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;if&lt;/SPAN&gt; nkeep=&lt;SPAN class="s2"&gt;&lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class="s3"&gt;then&lt;/SPAN&gt; do;&lt;/P&gt;&lt;P class="p6"&gt;end&lt;SPAN class="s1"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;if&lt;/SPAN&gt; nkeep=&lt;SPAN class="s2"&gt;&lt;STRONG&gt;4&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class="s3"&gt;then&lt;/SPAN&gt; do;&lt;/P&gt;&lt;P class="p6"&gt;end&lt;SPAN class="s1"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p6"&gt;print&lt;SPAN class="s1"&gt; j;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2"&gt;/*remove the cards from the deck - not sure if this is correct;*/&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;deck1=remove(deck , j);&lt;/P&gt;&lt;P class="p6"&gt;end&lt;SPAN class="s1"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; deck1;&lt;/P&gt;&lt;P class="p6"&gt;end&lt;SPAN class="s1"&gt;; &lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2"&gt;/*** SECOND DEALING ***/&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;if&lt;/SPAN&gt; nkeep&amp;gt;&lt;SPAN class="s2"&gt;&lt;STRONG&gt;0&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class="s3"&gt;then&lt;/SPAN&gt; do;&lt;/P&gt;&lt;P class="p2"&gt;/*call randseed(3,0,reinit);*/&lt;/P&gt;&lt;P class="p4"&gt;deal2 = sample(deck1,draw2 , &lt;SPAN class="s4"&gt;"WOR"&lt;/SPAN&gt;);&amp;nbsp;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;rows2=nrow(deal2);&lt;/P&gt;&lt;P class="p4"&gt;cols2=ncol(deal2);&lt;/P&gt;&lt;P class="p4"&gt;hand2=keep||deal2;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; hand2;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p6"&gt;end&lt;SPAN class="s1"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;if&lt;/SPAN&gt; nkeep=&lt;SPAN class="s2"&gt;&lt;STRONG&gt;0&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class="s3"&gt;then&lt;/SPAN&gt; do;&lt;/P&gt;&lt;P class="p2"&gt;/*call randseed(3,0,reinit);*/&lt;/P&gt;&lt;P class="p4"&gt;deal2 = sample(deck1,draw2 , &lt;SPAN class="s4"&gt;"WOR"&lt;/SPAN&gt;);&amp;nbsp;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; deal2;&lt;/P&gt;&lt;P class="p4"&gt;hand2=deal2;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p6"&gt;end&lt;SPAN class="s1"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2"&gt;/** put the initial hand in the matrix ***/&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Results[game, &lt;SPAN class="s2"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt;:ncol(hand2)] = hand2;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;if&lt;/SPAN&gt; draw=&lt;SPAN class="s2"&gt;&lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class="s3"&gt;then&lt;/SPAN&gt; do;&lt;/P&gt;&lt;P class="p2"&gt;&lt;SPAN class="s1"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;Results[game, &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;&lt;STRONG&gt;5&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;] = &lt;/SPAN&gt;&lt;SPAN class="s4"&gt;'Three'&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;; &lt;/SPAN&gt;/**8 dont know how to put numeric valuas and how to put N in each row **/&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;end&lt;/SPAN&gt;;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;if&lt;/SPAN&gt; draw=&lt;SPAN class="s2"&gt;&lt;STRONG&gt;4&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class="s3"&gt;then&lt;/SPAN&gt; do;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;Results[game, &lt;SPAN class="s2"&gt;&lt;STRONG&gt;5&lt;/STRONG&gt;&lt;/SPAN&gt;] = &lt;SPAN class="s4"&gt;'Four'&lt;/SPAN&gt;;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;end&lt;/SPAN&gt;;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2"&gt;/*** DEAL TURNS 1-T; *** not sure how to implement appropriately because unsure how to update deck ***/&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;Do&lt;/SPAN&gt; turn = &lt;SPAN class="s2"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN class="s3"&gt;to&lt;/SPAN&gt; T;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="Apple-converted-space"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;end&lt;/SPAN&gt;;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;&lt;P class="p2"&gt;&lt;SPAN class="s3"&gt;end&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;; &lt;/SPAN&gt;/*** game loop*/&lt;/P&gt;&lt;P class="p4"&gt;&lt;SPAN class="s3"&gt;print&lt;/SPAN&gt; Results;&lt;/P&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;quit&lt;/STRONG&gt;&lt;SPAN class="s1"&gt;;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 10 Sep 2015 21:38:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Simulating-card-draws-with-specific-requirements/m-p/225042#M2285</guid>
      <dc:creator>Tzachi</dc:creator>
      <dc:date>2015-09-10T21:38:32Z</dc:date>
    </item>
    <item>
      <title>Re: Simulating card draws with specific requirements</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Simulating-card-draws-with-specific-requirements/m-p/225323#M2297</link>
      <description>&lt;P&gt;I don't really have time to answer all your questions, but here are a few thoughts. that might help:&lt;/P&gt;&lt;P&gt;0) You define the variable k to mean two different things. Delete the line k = ceil( Max*u );&lt;/P&gt;&lt;P&gt;1) Use the ELEMENT function to see whether a deal contains specified cards. The &lt;A href="http://blogs.sas.com/content/iml/2015/05/11/loc-element-trick.html" target="_self"&gt;"loc-element technique"&lt;/A&gt;&amp;nbsp;might be useful if you need to know the positions of the cards in the hand.&lt;/P&gt;&lt;P&gt;2) You need to enclose "**bleep**" in quotes when defining the deck.&lt;/P&gt;&lt;P&gt;3) To add cards to the deck, use the vertical concatenation operator (//).&amp;nbsp; To remove cards from the deck, use subscripts or the REMOVE function.&lt;/P&gt;&lt;P&gt;4) I would break this problem into smaller subroutines and define modules to handle each subtask. For example Dea(), DrawCards(), ReturnCards(), Play1Game(), ResetDeck(), Shuffle(), etc. Presumably the deck would be an argument to these functions.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;HTH, Good luck!&lt;/P&gt;</description>
      <pubDate>Sun, 13 Sep 2015 19:22:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Simulating-card-draws-with-specific-requirements/m-p/225323#M2297</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2015-09-13T19:22:48Z</dc:date>
    </item>
    <item>
      <title>Re: Simulating card draws with specific requirements</title>
      <link>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Simulating-card-draws-with-specific-requirements/m-p/225653#M2311</link>
      <description>&lt;P&gt;Thanks Rick. I now have some hints with which to work. I will look into all of them.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 15 Sep 2015 17:21:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-IML-Software-and-Matrix/Simulating-card-draws-with-specific-requirements/m-p/225653#M2311</guid>
      <dc:creator>Tzachi</dc:creator>
      <dc:date>2015-09-15T17:21:20Z</dc:date>
    </item>
  </channel>
</rss>

