Bookmark and Share

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: How to use functions within variable names


From   Jakob Fischer <jagfish101@yahoo.de>
To   "statalist@hsphsun2.harvard.edu" <statalist@hsphsun2.harvard.edu>
Subject   Re: st: How to use functions within variable names
Date   Fri, 19 Aug 2011 02:28:01 +0100 (BST)

c is already the largest value for every group. It was created in a similar way to your suggestion.

-rowsort- would have saved my time, if I'd knew about it before

I solved the process by doing it for the first observation, moving it to the last position and repeating it until the original first observation returns


*----------- begin example -------------
clear
generate obs= _n
clear
input a0 a1 a2 a3 c group result0 result1 result2 b0 b1 b2
      .    1    2    3    3    1    3    2    1    .    .    .
      .    4    5    .    3    1    .    5    4    .    .    .
      .    6    .    .    3    1    .    .    6    .    .    .
      .    7    .    .    2    2    .    7    .    .    .    .
      .    8    .    .    2    2    .    8    .    .    .    .
      .    9    10    .    2    2    10    9    .    .    .    .
end
generate obs= _n
compress

list a1 a2 a3 group c
//The result should be in reversed order, always starting with variable result0. Where c is the biggest "length" of a-variables within a group.
 
list result0 result1 result2 group c
//This is what the final result should look like

//c being the largest amount of non-empty a-variables within a group
//Group 1: c=3 because of observation 1
//Group 2: c=2 because of observation 6


gen done=.
gsort -c
while done==. {

set obs `=_N+1'
forvalue i=0/2 {
replace b`i'=a`=c-`i'' in 1
}
foreach var in a0 a1 a2 a3 c group result0 result1 result2 b0 b1 b2 obs {
replace `var'= `var'[1] in l
}
replace done=1 in l
drop in 1
}


drop done
sort obs
*------------ end example --------------

I'm sure there is a simplier way to achieve this, but I'm satisfied with the result. I hope that it will work with my real data too.

Thank you for your input.

-Jakob

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   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   |   Site index