Notice: On March 31, it was **announced** that Statalist is moving from an email list to a **forum**. The old list will shut down on April 23, and its replacement, **statalist.org** is already up and running.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

From |
Nick Cox <njcoxstata@gmail.com> |

To |
"statalist@hsphsun2.harvard.edu" <statalist@hsphsun2.harvard.edu> |

Subject |
Re: st: generating random numbers without replacement |

Date |
Sat, 25 May 2013 08:40:01 +0100 |

The preceding specifications I take to mean "I wish to generate random numbers between 1 and 5, without replacement." I don't understand what this means as you don't say from what distribution such numbers are drawn (discrete integers 1,2,3,4,5 or continuous on the interval; uniform or stated alternative) or about dependence or independence structure. I could speculate, but I would rather you gave a precise specification. The only complete explanation of Mata is the manual. It's in flavour an in-house manual for StataCorp's developers that happens to be public to Stata users. (That's a bit tongue-in-cheek.) There's perhaps a presumption that you are at least broadly familiar with programming in a C-like language. Excessive familiarity with Stata is in some ways a disadvantage as Stata is full of Stataish idiosyncrasies, starting with heavy use of local and global macros. But cheer up... Quite a few people have written programs using Mata without ever using more than a small fraction of the language. And there is a very nice introduction in Kit Baum's book http://www.stata.com/bookstore/stata-programming-introduction/ Nick njcoxstata@gmail.com On 25 May 2013 06:23, Michael McCulloch <mm@pinestreetfoundation.org> wrote: > Thank you kindly Nick for the translation! > How would I rewrite the ultimate line (a, meaning "now show me a), to instead generate the variable a according to the preceding specifications? > > And, can you recommend a book or tutorial that explains Mata as you so clearly do here? > > Best wishes, > Michael McCulloch, LAc MPH PhD > > -- > Pine Street Foundation, since 1989 > 124 Pine Street | San Anselmo | California | 94960-2674 > P: (415) 407-1357 | F: (206) 338-2391 | http://www.PineStreetFoundation.org > > On May 24, 2013, at 10:05 PM, Nick Cox wrote: > >> Note that the Mata code misses a trick >> >> a = J(100,1,.) >> for(i = 1; i<=100; i++) a[i,1] = i >> >> is a long-winded alternative to >> >> a = 1::100 >> >> In fact you could shorten the code further, but I will stop there. >> >> One Stata translation is >> >> set obs 100 >> gen a = _n >> gen rnd = runiform() >> sort rnd >> l a rnd >> >> I would usually preface that by -set seed 2803- or some such. >> >> Here is a line-by-line translation >> >> mata >> // open Mata >> a=J(100,1,.) >> // a is a vector with 100 rows, 1 column, all missing values >> for(i=1;i<=100;i++) a[i,1]=i >> // loop from i = 1 to i = 100 incrementing i by 1 at each step: >> // set the i th row and 1st column of a to i >> a=a,runiform(100,1) >> // join a row-by-row with a vector with 100 rows, 1 column of uniform >> random numbers >> a=sort(a,2) >> // sort a according to the values in the second column: >> // wanted consequence is a random shuffle of 1::100 in first column >> a >> // now show me a >> >> I wrote -swor- a while back, but I can't remember much about it. More >> important is -sample-. >> >> SJ-5-1 dm86_1 . . . . . . . . . . . . . . . . . . . Software update for swor >> (help swor if installed) . . . . . . . . . . . . . . . . . N. J. Cox >> Q1/05 SJ 5(1):139 >> swor rewritten to use sort, stable for reproducibility and >> sortpreserve for compatibility; help file also modernized >> >> STB-59 dm86 Sampling without replacement: abs. sample sizes & keeping all obs >> (help swor if installed) . . . . . . . . . . . . . . . . . N. J. Cox >> 1/01 pp.8--9; STB Reprints Vol 10, pp.38--39 >> samples without replacement a specified sample size; >> alternative to sample >> >> Nick >> njcoxstata@gmail.com >> >> On 24 May 2013 22:30, Michael McCulloch <mm@pinestreetfoundation.org> wrote: >> >>> I wish to generate random numbers between 1 and 5, without replacement. I have located the following Mata code, but have not yet learned Mata. Is it possible to rewrite this to create the variable a? >>> >>> mata >>> a=J(100,1,.) >>> for(i=1;i<=100;i++) a[i,1]=i >>> a=a,runiform(100,1) >>> a=sort(a,2) >>> a >>> end >>> >> * >> * For searches and help try: >> * http://www.stata.com/help.cgi?search >> * http://www.stata.com/support/faqs/resources/statalist-faq/ >> * http://www.ats.ucla.edu/stat/stata/ > > > * > * For searches and help try: > * http://www.stata.com/help.cgi?search > * http://www.stata.com/support/faqs/resources/statalist-faq/ > * http://www.ats.ucla.edu/stat/stata/ * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/faqs/resources/statalist-faq/ * http://www.ats.ucla.edu/stat/stata/

**Follow-Ups**:**Re: st: generating random numbers without replacement***From:*Michael McCulloch <mm@pinestreetfoundation.org>

**References**:**st: generating random numbers without replacement***From:*Michael McCulloch <mm@pinestreetfoundation.org>

**Re: st: generating random numbers without replacement***From:*Nick Cox <njcoxstata@gmail.com>

**Re: st: generating random numbers without replacement***From:*Michael McCulloch <mm@pinestreetfoundation.org>

- Prev by Date:
**Re: st: generating random numbers without replacement** - Next by Date:
**st: mvprobit with autocorrelation and unobserved heterogeneity** - Previous by thread:
**Re: st: generating random numbers without replacement** - Next by thread:
**Re: st: generating random numbers without replacement** - Index(es):