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: -args- how to flag when missing or too many arguments


From   John Antonakis <John.Antonakis@unil.ch>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: -args- how to flag when missing or too many arguments
Date   Fri, 22 Mar 2013 09:35:12 +0100

Hi Nick

Your first line was munched by the hungry list beast.

Could you resend?

Best,
J.

__________________________________________

John Antonakis
Professor of Organizational Behavior
Director, Ph.D. Program in Management

Faculty of Business and Economics
University of Lausanne
Internef #618
CH-1015 Lausanne-Dorigny
Switzerland
Tel ++41 (0)21 692-3438
Fax ++41 (0)21 692-3305
http://www.hec.unil.ch/people/jantonakis

Associate Editor
The Leadership Quarterly
__________________________________________

On 22.03.2013 09:30, Nick Cox wrote:
> work" as an error report.
>
> if "`chi'" == ""
>
> is sufficient as a test of there not being four arguments. Whether
> there are none, one, two, or three, it follows in each case that there
> was no fourth argument.
>
> Your code does not test that the arguments are integers (which you can
> do in one line with -numlist-).
>
> Nick
>
> On Fri, Mar 22, 2013 at 7:51 AM, John Antonakis <John.Antonakis@unil.ch> wrote:
>> Thanks Nick.  That works.
>>
>> With respect to flagging less than four Austin gave me some nice code that
>> works. Following Nick's approach, the below doesn't work and I can't see
>> why:
>>
>>   ...
>>   args no_vars df N chi too_much
>>
>> *nick's part, works
>>   if "`too_much'" != "" {
>>   di as err "Too many arguments. "
>>   exit 198
>>   }
>>
>> *my part, does not work
>>   if "`no_vars'"=="" | "`df'"=="" | "`N'"=="" | "`chi'"=="" {
>>   di as err "You have to use four integers. "
>>   exit 498
>>
>>   }
>>
>> Best,
>> J.
>>
>> __________________________________________
>>
>> John Antonakis
>> Professor of Organizational Behavior
>> Director, Ph.D. Program in Management
>>
>> Faculty of Business and Economics
>> University of Lausanne
>> Internef #618
>> CH-1015 Lausanne-Dorigny
>> Switzerland
>> Tel ++41 (0)21 692-3438
>> Fax ++41 (0)21 692-3305
>> http://www.hec.unil.ch/people/jantonakis
>>
>> Associate Editor
>> The Leadership Quarterly
>> __________________________________________
>>
>> On 22.03.2013 02:46, Nick Cox wrote:
>>>
>>> My approach for these problems is -- in a case with only 4 arguments
>>> wanted --
>>>
>>> args a b c d garbage
>>>
>>> if "`garbage'" != ""
>>>         di as err "too many arguments"
>>>         exit 198
>>> {
>>>
>>> On Thu, Mar 21, 2013 at 10:14 PM, John Antonakis <John.Antonakis@unil.ch>
>>> wrote:
>>>>
>>>> Thanks, Austin.
>>>>
>>>> This works too, except for when w > 4; it does not display the error.
>>>> The
>>>> program just ignores any arguments beyond 4 arguments (as is the default
>>>> in
>>>> Stata).
>>>>
>>>>
>>>> Best,
>>>> J.
>>>>
>>>> __________________________________________
>>>>
>>>> John Antonakis
>>>> Professor of Organizational Behavior
>>>> Director, Ph.D. Program in Management
>>>>
>>>> Faculty of Business and Economics
>>>> University of Lausanne
>>>> Internef #618
>>>> CH-1015 Lausanne-Dorigny
>>>> Switzerland
>>>> Tel ++41 (0)21 692-3438
>>>> Fax ++41 (0)21 692-3305
>>>> http://www.hec.unil.ch/people/jantonakis
>>>>
>>>> Associate Editor
>>>> The Leadership Quarterly
>>>> __________________________________________
>>>>
>>>> On 21.03.2013 22:54, Austin Nichols wrote:
>>>>>
>>>>> John Antonakis <John.Antonakis@unil.ch>:
>>>>> You might also want to step through various conditions and then issue
>>>>> a more informative error message at the end, e.g. consider adapting
>>>>> this approach:
>>>>>
>>>>> cap prog drop john
>>>>> prog john, rclass
>>>>>    version 12
>>>>>    loc err 0
>>>>>    args no_vars df N chi
>>>>>    loc w: word count `no_vars' `df' `N' `chi'
>>>>>    if `w'>4 {
>>>>>     loc err 1
>>>>>     di in red "More than 4 arguments given"
>>>>>     }
>>>>>    foreach v in no_vars df N chi {
>>>>>     cap confirm integer number `=``v'''
>>>>>     if _rc!=0 {
>>>>>      loc err 1
>>>>>      di in red "Arguments must be integers."
>>>>>      }
>>>>>     else if ``v''<0 {
>>>>>      loc err 1
>>>>>      di in red "Arguments must be positive integers."
>>>>>      }
>>>>>     }
>>>>>    if `err'==1 {
>>>>>     di in red "Please enter data after the command" _c
>>>>>     di in red " john as follows: vars df N chi"
>>>>>     exit 198
>>>>>     }
>>>>> end
>>>>>
>>>>> On Thu, Mar 21, 2013 at 5:49 PM, daniel klein
>>>>> <klein.daniel.81@gmail.com>
>>>>> wrote:
>>>>>>
>>>>>> John,
>>>>>>
>>>>>> I think I would address this with something like this
>>>>>>
>>>>>> cap pr drop john
>>>>>> pr john
>>>>>>           vers 12.1
>>>>>>
>>>>>>           args a b c d
>>>>>>           if !inrange(`: word count `0'', 1, 4) {
>>>>>>                   di as err "Please enter data after " ///
>>>>>>                   "the command john as follows: vars df N chi"
>>>>>>                   e 198
>>>>>>           }
>>>>>>           numlist "`0'" ,int r(>0)
>>>>>>
>>>>>> end
>>>>>>
>>>>>> Best
>>>>>> Daniel
>>>>>> --
>>>>>> Hi:
>>>>>>
>>>>>> I am writing a program and would like Stata to return an error if an
>>>>>> argument is missing or there are too many of them.
>>>>>>
>>>>>>
>>>>>> For example, if an argument is not an integer, the below will return an
>>>>>> error:
>>>>>>
>>>>>>
>>>>>>     program define john, rclass
>>>>>>     version 12
>>>>>>     args no_vars df N chi
>>>>>>
>>>>>>     if `no_vars'<0 | `df'<0 | `N'<0 | `chi'<0 {
>>>>>>     di in red "You have to use integers."
>>>>>>     exit 498
>>>>>>     }
>>>>>> end
>>>>>>
>>>>>> Now, how do I make Stata display:
>>>>>>
>>>>>> di in red "Please enter data after the command john as follows: vars df
>>>>>> N
>>>>>> chi"
>>>>>>
>>>>>>
>>>>>> .....in cases where (a) there is a missing value (i.e., the user
>>>>>> missed putting 4 numbers) and (b) if the user provides too many
>>>>>> numbers (i.e., 5 instead of 4).
>>>
>>> *
>>>
>>> *   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/

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