Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.


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

st: listing only a few observations that satisfy a condition


From   Nick Cox <[email protected]>
To   [email protected]
Subject   st: listing only a few observations that satisfy a condition
Date   Mon, 12 Nov 2012 00:21:31 +0000

Over at <http://stackoverflow.com/questions/13272572/stata-list-only-few-number-of-records-with-condition>

"giordano" asked

"I would like to list only few numbers of records with some
conditions. Problem: if I use in 1/4 or _n <= 4 and the first 4
records do not satisfy the condition no records are listed. Here is an
example:

clear
input x
1
2
3
4
5
6
end
list if x > 4  & _n <=
list in 1/3 if x > 4
Does anybody has an idea how can be solved this problem without in one line?"

Interesting question. You want just to see examples, not a complete
list. -codebook- has a little of that flavour, but what else?

The problem is that "in 1/4" (e.g.) doesn't mean show me the first
four examples.

Dimitriy Masterov posted a short program. Here's another program, but
examples first

. sysuse auto
(1978 Automobile Data)

. eglist mpg
(74 observations)

     +-----+
     | mpg |
     |-----|
  1. |  22 |
  2. |  17 |
  3. |  22 |
  4. |  20 |
  5. |  15 |
     +-----+

. eglist mpg if foreign
(22 observations)

     +-----+
     | mpg |
     |-----|
 53. |  17 |
 54. |  23 |
 55. |  25 |
 56. |  23 |
 57. |  35 |
     +-----+

. eglist mpg if foreign, last
(22 observations)

     +-----+
     | mpg |
     |-----|
 70. |  23 |
 71. |  41 |
 72. |  25 |
 73. |  25 |
 74. |  17 |
     +-----+

*! 1.0.0 NJC 9 Nov 2012
program eglist, sortpreserve byable(recall)
	version 8
	syntax varlist [if] [in] [ , n(int 5) MISSing LAST * ]

	marksample touse, novarlist
	if _by() & "`missing'" == "" {
		markout `touse' `_byvars', strok
	} 	

	quietly {
		count if `touse'
		if r(N) == 0 error 2000
		local N = r(N)
		replace `touse' = cond(`touse', sum(`touse'), .)
	}

	di as text "(`N' observations)"

	if "`last'" == "" {
		list `varlist' if inrange(`touse', 1, `n'), `options'
	}
	else list `varlist' if inrange(`touse', `N' - `n' + 1, `N')
end

I'm probably missing something here.

Nick
*
*   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/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index