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: passing indefinite no of arguments


From   Nick Cox <njcoxstata@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: passing indefinite no of arguments
Date   Wed, 4 Apr 2012 18:54:55 +0100

It is best to think that you are addressing Statalist, not any one person.

Evidently you have a do-file -file.do- but where it starts and ends is
not clear from your code fragments below.

Evidently you are using -syntax- in a do-file which is not illegal but
it is unusual. You need to understand that -syntax- looks inside the
local macro 0, which apparently you never define. In a program,
defined by code following a -program- statement, that is done
automatically. However, `1' `2' etc. are defined in a do-file so your
misunderstanding does not bite you. That is, the two lines

syntax anything
tokenize `anything'

do absolutely nothing but that does not invalidate your problem. On
the other hand,

foreach x of  varlist1 id* {

is illegal. You are confusing two quite different syntaxes: examples are.

foreach x of local varlist1 {

foreach x of varlist id* {

As I have tried to signal before, I advise against trying to write
your own ranking code when Stata (and Mata) provide tools for sorting
and ranking and there are existing programs to be exploited.

Nick

On Wed, Apr 4, 2012 at 4:52 PM, tashi lama <ltashi32@hotmail.com> wrote:
> Hello Nick,
>
>       Could you pls look into my code below and tell me where is that I screwed although I feel like the code should work fine, at least in principle. Here is the dataset and the problem is of ranking ignoring few variables.
>

> date           hits1     hits2     hits3      hits4   hits5
>
> 01jan2010       3          2        5          1          5
>
> 02jan2010       5          7        8          4          2
>
> 03jan2010       8          6        2          1          6
>
> 04jan2010       6          5        3          2          7
>
> 05jan2010       6          4        2          6          7
>
> 06jan2010       1          5        3          7          8
>
>
>
>
>
> if "`2'"=="rank"  {
>
>                    syntax anything                        /*allowing any data type to be passed. `3' and `4' are start_date and end_date
>                    tokenize `anything'
>                    local para "`1'" "`2'" "`3'" "`4'"      /* breaking arguments into 2 macros `para' and `deselected' and putting first 4 arguments into `para' and rest into `deselcted'.
>                    macro shift 4
>                    local deselected "`*'"
>                       unab all : hits*
>                       local varlist1 : list all - deselected                 /ignore variables from the list
>                       di "` varlist1'"                            /displays the variables after ignoring. Works until this point.
>
>                     rename hits* id_*                                     /changing hits1 into id_1 and so on....
>                     collapse (sum) id* if tin(`3',`4')                       /summing providing date range
>                     local counter 1
>                      foreach x of  varlist1 id* {                              /comparing and ranking
>                          if `x'!=id_`1' & `x'>id_`1' {
>                                            local  ++counter
>                                                      }
>                                                 }
>                           list
>                           di "There are `count' firms in total and I rank `counter' "
>                     exit
>                      }
>
>
>
>
>
> Questions:
>
> 1. When I ran
>
>         do file 1 rank 01jan2010 02jan2010 hits3 hits4, there is an error which reads invalid syntax. I am not sure where I screwed.
>
>
>
> 2. I supplied date range(01jan2010-02jan2010) for collapse sum, but it sums for all the dates (01jan2010-06jan2010). Any idea?
>
> 3. when I change the for loop as       foreach x of local varlist1  and run it, I get hits1 not found. So, it is still taking hits1 as the first variable in the varlist1. But I thougnt everything in varlist1 starts with id_ since I renamed them. Could you pls explain?
>
>
>
>  Thank you very much and I really appreciate your time...
>

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