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: Storing error messages as local macros


From   "Sarah Edgington" <[email protected]>
To   <[email protected]>
Subject   RE: st: Storing error messages as local macros
Date   Tue, 26 Nov 2013 16:48:28 -0800

Kenneth,
I've used -desc, varlist- for similar tasks where I have multiple files with
different permutations of the variables.
One way to do this is something like:

desc, varlist
**create a macro with a space before and after the varlist so you can always
match on space[varname]space
**otherwise you might have to worry about vars that match substrings of
other vars
local indata " `r(varlist)' "
**you're probably embedding this in another loop so reset the local keeplist
in case it isn't empty
local keeplist ""
foreach keepvar in schoolid distid math read language  {
	**for each variable in your list, cycle through and check that it's
in the variable list. 
	**if it is, add it to a keeplist macro
	if strmatch("`indata'","* `keepvar' *") local keeplist "`keeplist'
`keepvar'"
}
keep `keeplist'


There are probably more elegant solutions but this does get around the issue
of having to parse the error messages.

-Sarah


-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Nick Cox
Sent: Tuesday, November 26, 2013 4:15 PM
To: [email protected]
Subject: Re: st: Storing error messages as local macros

Interesting question. I don't know a way to store the error message.
What you can do is store the code and replay the message at any later time.
For example -error 198- replays the message for 198, regardless of whether
was the last error.

The commands

local rc = _rc
if `rc' != 0 <whatever>

can be compressed to

if _rc != 0 <whatever>

and indeed to

if _rc <whatever>

but it remains true that you would need to store non-zero error codes for
later use as _rc contains only a code for the last command issued.
Nick
[email protected]


On 26 November 2013 23:39, Kenneth Shores <[email protected]>
wrote:
> Hi stata list-serve:
>
> Here is a question I have not seen asked. I am importing a large 
> number of datasets, keeping variables that I want, doing a number of 
> reshapes and saving the dataset.
>
> In each of the datasets, there are core variables that are common 
> across all datasets. However, there are additional variables that I 
> want that are not common to all datasets. For example, in dataset i, 
> there is a school identifier, district identifer, reading, language 
> and math scores. In dataset j, there is a school identifier, district 
> identifier, reading, and math scores.
>
> The first command I wish to run is "keep schoolid distid read math
language"
> This will return an error when I try to bring up dataset j.
>
> The alternative I use is:
> cap keep schoolid distid read math language loc rc = _rc if `rc' != 0 
> keep schoolid distid read math
>
> This works, insofar as all datasets look like i and j. However, 
> dataset k has schoolid, read, and math. Now the new keep command 
> breaks.
>
> There are many different permutations of this. Moreover, there are 300 
> datasets and programming a specific keep command for each one will be 
> time consuming  (there are also more than 5 variables that I want).
>
> It seems that I could make use of the error message itself in these 
> cases. Because the error message informs me about what vars are not 
> found, I could store those not found vars in a local macro. The final 
> code would then be something like this:
>
> local keepvars "schoolid distid math read language"
> cap keep `keepvars'
> [store error message, parse "vars not found portion"] loc rc = _rc if 
> `rc'!=0 loc keepvarsalt: subinstr local keepvars "`[parsed error 
> message]'" ""
> keep `keepvarsalt'
>
> this would be very flexible and would make use of the specificity of 
> the Stata error message. However, I cannot find any way to store the 
> error message text. Is it not possible? And if not, are there 
> solutions to this problem that others are aware of.
>
> Thanks in advance,
> -Kenneth Shores
> PhD Candidate, Stanford Univ. School of Education
> *
> *   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/
*
*   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/

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