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]

RE: st: RE: Defining input and output variables when calling a program


From   Svend Juul <SJ@soci.au.dk>
To   "statalist@hsphsun2.harvard.edu" <statalist@hsphsun2.harvard.edu>
Subject   RE: st: RE: Defining input and output variables when calling a program
Date   Wed, 16 Feb 2011 17:30:44 +0100

Thank you, Nick - this works beautifully.

Svend

________________________________________________________
Svend Juul
School of Public Health, Department of Epidemiology
Bartholins Allé 2
DK-8000 Aarhus C,  Denmark
sj@soci.au.dk<mailto:sj@soci.au.dk>
_________________________________________________________

================================================
The syntax -, Generate(newvarlist)- is what you would tell the user.

Internally it might look something like this

syntax varlist , Generate(str)
...
capture Checknewvarlist `generate'
if _rc {
 di as err "generate() problem: " _c
 error _rc
}
...
end

program Checknewvarlist
 syntax newvarlist
 c_local generate `varlist'
end

c_local is a non-documented command that pushes the newvarlist back into the main program inside the local macro -generate-, unabbreviated if necessary. So, when you -generate- you can loop over the words inside that macro.

For another way to do it, look inside -rowsort- (SJ). But beware: -syntax- calls zap macros created by a previous -syntax call inside a program. That's why I delegate the task here to a subprogram.

Another way to do it would be for the subprogram to be s-class.
Nick
n.j.cox@durham.ac.uk<mailto:n.j.cox@durham.ac.uk>



Svend Juul

This looks perfect, Nick. My problem is, I don't know how to get there. Could you give a hint?
Nick Cox
This isn't impossible, but first let's explore another possibility.
How do you feel about the syntax
svendsational varlist, Generate(newvarlist)
? -- because that's relatively easy.
Svend Juul
I want to develop a command (ado-file) that takes as the input the responses to a number of questions and as output generates new variables, much as the reponses to the 36 questions in the SF-36 questionnaire are used to generate 8 scales. I want the command to be flexible; the names of the input and output variables being defined when calling the program, not by modifying the program.
If the program name is xxx, the input variables are q1-q15 and the output variables s1-s5, I want to be able to call the program by something like:
  . xxx q1-q15 s1-s5
The following is not legal; apparently you cannot have both a -varlist- and a -newvarlist-:
  . syntax varlist(min=15 max=15) newvarlist(min=5 max=5)
If I combine the input and output variables in a single -varlist- I get an error message because all variables must exist in the dataset beforehand:
  . syntax varlist(min=20 max=20)
... - unless I generate the output variables (e.g., as missing) before calling the program, but that seems to me to be a clumsy solution.



*
*   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–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index