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

Re: st: Identifying single psu within strata


From   [email protected] (Jeff Pitblado, StataCorp LP)
To   [email protected]
Subject   Re: st: Identifying single psu within strata
Date   Fri, 29 Apr 2005 14:45:18 -0500

R.E. De Hoyos <[email protected]> asks about generating an indicator variable
that identifies strata with a single PSU:

> I want to run wage regressions for several population groups. Estimations 
> have to take care of the survey design (svy). The problem is that for some 
> of the groups there are strata with a single psu (primary samplying unit). 
> Using -svydes- I can identify does strata, for example:
> 
> For wage equation: svyreg wage_1 varlist_1:
> 
> svydes wage_1 varlist_1
> 
> And Stata will highlight those strata with a single psu. How can I create a 
> dummy variable that indicates weather a strata has a single psu given the 
> variables that I want to use for the analysis?
> In other words I want a dummy variable that takes the value of 1 if -svydes- 
> highlights a strata.

This feature was added to -svydes- in Stata 9.  -svydes- now has a
-generate()- option that generates this variable.

In Stata 8, there is no such option; however, the output of -svydes- should
identify the "singleton" strata using the values from the strata variable that
was -svyset-.  You can use the output from -svydes- to generate a new
variable.

If you need to do this for a bunch of different groups, you will need to write
a program.  You can start with the following:

***** BEGIN: singleton.ado
program singleton, sort
	version 8
	syntax [varlist(numeric default=none)] [if] [in], ///
		STRata(varname) gen(name) [ PSU(varname) ]
	confirm new var `gen'
	marksample touse
	if "`psu'" == "" {
		tempvar psu
		gen `psu' = _n
	}
	tempvar u
	sort `touse' `strata' `psu'
	quietly by `touse' `strata' `psu': gen `u' = _n == 1
	quietly by `touse' `strata': replace `u' = sum(`u')
	quietly by `touse' `strata': replace `u' = cond(`u'[_N] == 1, 1, 0)

	quietly replace `u' = . if !`touse'
	rename `u' `gen'
end
***** END: singleton.ado

Here is a log using the above -singleton- program with the auto data:

***** BEGIN:
. clear

. sysuse auto
(1978 Automobile Data)

. * Example with no singleton strata
. singleton, strata(rep) gen(jj)

. tab rep if jj
no observations

. * Example with 2 singleton strata
. singleton, strata(rep) psu(for) gen(kk)

. tab rep if kk

     Repair |
Record 1978 |      Freq.     Percent        Cum.
------------+-----------------------------------
          1 |          2       20.00       20.00
          2 |          8       80.00      100.00
------------+-----------------------------------
      Total |         10      100.00

. * Proof that 2 categories of -rep78- have only "Domestic" cars
. tab rep for

    Repair |
    Record |       Car type
      1978 |  Domestic    Foreign |     Total
-----------+----------------------+----------
         1 |         2          0 |         2 
         2 |         8          0 |         8 
         3 |        27          3 |        30 
         4 |         9          9 |        18 
         5 |         2          9 |        11 
-----------+----------------------+----------
     Total |        48         21 |        69 
***** END:

--Jeff
[email protected]
*
*   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–2024 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index