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]
Re: st: Reshape question
Nick Cox <firstname.lastname@example.org>
Re: st: Reshape question
Sun, 8 May 2011 08:38:55 +0100
The answer to Mike's question is documented.
FAQ . . . . . . . . . . . . . . . . . . . . . . . . Problems with reshape
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . N. J. Cox
12/03 I am having problems with the reshape command. Can
you give further guidance?
% begn quotation
If I have many variables all occurring in pairs for two years 1997 and
1998, so that the dataset looks like A97, A98, B97, B98, and so on, is
there any easy way to reshape the data to long without typing all the
The variable names are collectively *97 *98, so we need a way of
expanding that list of wildcard names automatically and then removing
the suffix. We can work on either *97 or *98.
unab is usually billed as a programmer's command, but it can be used
interactively. It unabbreviates a varlist and puts the result in a
. unab vars : *97
Then we zap all the occurrences of the suffix "97":
. local stubs : subinstr local vars "97" "", all
In other words, each occurrence of "97" is replaced by an empty
string; that is, they are removed. See macro.
Then we can
. reshape long `stubs', options
% end quotation.
So in this case:
. unab vars : a_*
. local stubs : subinstr local vars "a_" "", all
So Keith is right, you can construct the stubs as a local macro. But
you certainly don't need to type them all out.
On Sun, May 8, 2011 at 1:00 AM, Keith Dear <email@example.com> wrote:
> Not that I know of. You might be able to build the list as a macro,
> using a loop that exploits the structure of the 70 names. But really,
> 70 isn't so very many -- why not just list them explicitly, like this:
> loc mylist gg hh ii // etc etc
> loc mylist = subinstr(" `mylist'"," "," @_",.) // nb leading spaces
> reshape long `mylist', i(id) j(country) string
> On 7 May 2011 22:22, Mike Kim <firstname.lastname@example.org> wrote:
>> Keith Dear,
>> Thank you, it works! Additional question is... my data contain around 70
>> different variable names with the same pattern (so, the total variables are
>> 70*5 = 3500). Is there any way I can reshape without listing all 70 variable
>> -----Original Message-----
>> From: email@example.com
>> [mailto:firstname.lastname@example.org] On Behalf Of Keith Dear
>> Sent: Saturday, May 07, 2011 1:02 AM
>> To: email@example.com
>> Subject: Re: st: Reshape question
>> reshape long @_gg @_hh @_ii , i(id) j(country) string
>> On 7 May 2011 14:00, Mike Kim <firstname.lastname@example.org> wrote:
>>> Dear listers,
>>> My data looks like the following and I want to reshape it from wide to
>>> There are many more similar variables with the same pattern. Is there any
>>> easy way to reshape?
>>> id a_gg b_gg c_gg d_gg e_gg a_hh b_hh c_hh d_hh e_hh a_ii b_ii c_ii d_ii
>>> e_ii ..
>>> 1 1 5 3 1 2 4 1 1
>>> 5 1 3 1 1 4 1
>>> 2 4 1 1 2 1 1 1 2
>>> 1 1 1 1 5 1 1
>>> 3 2 1 2 1 1 1 5 1
>>> 1 3 1 1 1 3 1
>>> The data format I want is:
>>> id country gg hh ii ..
>>> 1 a
>>> 1 b
>>> 1 c
>>> 1 d
>>> 1 e
>>> 2 a
>>> 2 b
>>> 2 c
>>> 2 d
>>> 2 e
>>> 3 a
>>> 3 b
>>> 3 c
>>> 3 d
>>> 3 e
* For searches and help try: