Stata The Stata listserver
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

st: Re: RE: Re:Is there any way ?


From   "victor michael zammit" <vmz@vol.net.mt>
To   <statalist@hsphsun2.harvard.edu>
Subject   st: Re: RE: Re:Is there any way ?
Date   Sun, 12 Sep 2004 23:26:47 +0200

I am using version 8.2
What I am trying to do is to isolate  normally distributed variables closest
to a mean of 50 and a sd of 10.
The following clip is from a generation of 1000 such variables . 76 and 833
are  variables that qualify to the relevant criteria  .They are saved in my
directory as  a76.dta    and  a833.dta  respectively .
mean         sd     i
> > ---------------------------
> > 1.  49.96996   9.978514    76
......................
> > 15.  50.08827   9.936735   833

What I need is a code that is capable of (for example) ,  renaming   a76.dta
,   b76.dta  &  a833.dta ,  b833.dta  , and thus being able to freely write
over the previous   a1.dta , a2.dta   ..... a1000.dta ,  to handle other
criteria , while conserving   memory .
Victor Michael Zammit

----- Original Message -----
From: Nick Cox <n.j.cox@durham.ac.uk>
To: <statalist@hsphsun2.harvard.edu>
Sent: Saturday, September 11, 2004 4:10 PM
Subject: st: RE: Re:Is there any way ?


> I am a bit lost on what you are trying to do
> here. You seem to be generating samples from
> a normal, but only wanting to keep them if they appear
> really close to the target population
> in the sense that sample mean and sample sd
> are really close to the corresponding population
> parameters.
>
> If that's right and memory is the issue, then
> you should test each sample just after generation
> and drop it immediately if it is not up to your
> standards. Or equivalently you could do something
> like this:
>
> gen prov = .
> local j = 1
> qui while `j' < 100

> replace prov = 50 + 10 * invnorm(uniform())
> su prov
> if inrange(r(mean),49.9,50.1)) & inrange(r(sd),9.9,10.1)

> gen OK`j++' = prov
> }
> }
>
> That way, what you have in memory is just
> the last sample generated
> and all previous samples generated deemed OK
>
> By the way, standard advice in the Statalist FAQ is
>
> The current version of Stata is 8.2. Please specify if
> you are using an earlier version; otherwise, the answer
> to your question is likely to refer to commands or
> features unavailable to you.
>
> Nick
> n.j.cox@durham.ac.uk
>
> P.S. Stata is telling you why your code didn't work. First
> time round it thinks that the
>
> [1]
>
> in
>
> use ai[1].dta, clear
>
> is a reference to weights. This also is puzzling. Presumably
> you wouldn't try to -use- that dataset if you hadn't previously
> saved it, but is that a legal filename with your (unstated)
> operating system?
>
> --------------------------------------------------------------
>
> victor michael zammit
>
> > the following dataset lists the 16 variables , out of 1000  normally
> > distributed variable with mean 50 and standard deviation 10
> > , and then  <
> > keep if  mean>49.9 & mean < 50.1 & sd > 9.9 & sd< 10.1 > .  I
> > would like to
> > do this  for different  < set obs # > ,and 10,000 instead of
> > 1000  , but
> > memory becomes an issue .What I thought I could do , is to
> > save  variable i
> > ' s  under a different name, and then go to the  next  <set
> > obs #> and <
> > save,replace> over the previous 1000 or whatever  variables .
> >
> > +---------------------------+
> > mean         sd     i
> > ---------------------------
> > 1.  49.96996   9.978514    76
> > 2.  49.92636   10.07861   118
> > 3.  49.97271   10.07149   122
> > 4.  50.07562   10.07239   218
> > 5.  49.94316   9.913686   220
> > ---------------------------
> > 6.  50.02873   10.05811   346
> > 7.  50.01596   10.04384   442
> > 8.  50.00026   9.943673   513
> > 9.  49.91186    9.95947   533
> > 10.  50.00311   10.00525   629
> > ---------------------------
> > 11.  50.09705   9.929688   653
> > 12.  49.98079   10.04592   678
> > 13.  49.93727   9.962771   686
> > 14.  49.98563   10.07247   694
> > 15.  50.08827   9.936735   833
> > ---------------------------
> > 16.  49.97584   10.05994   854
> >
> >
> > I experimented with a loop :
> >
> >
> > . local i = 1
> >
> > . while `i'<= _N  {
> > 2. use  ai[`i'].dta,clear
> > 3. save b`i',replace
> > 4. local i = `i'+1
> > 5. }
> > weights not allowed
> > r(101);
> >
> > but it did not work
> > Is there a way I could do this ?
>
> *
> *   For searches and help try:
> *   http://www.stata.com/support/faqs/res/findit.html
> *   http://www.stata.com/support/statalist/faq
> *   http://www.ats.ucla.edu/stat/stata/
>

*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/



© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index