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: Macros in -listtab- header: syntax error


From   "Roger B. Newson" <r.newson@imperial.ac.uk>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: Macros in -listtab- header: syntax error
Date   Thu, 22 Nov 2012 21:52:05 +0000

What you are doing doesn't seem to produce a well-formed string argument for input to -file-.

A better idea might be to use the -headchar()- option of -listtab-, after storing the header strings "Grade 1", "Grade 2" and "Grade 3" in a named variable characteristic for each of the variables to be output (eg -headchar(varname)- if we want each variable to have a characteristic with name -varname-). This will produce header row containing the specified characteristic values of the output variables, separated by the delimiter, which you have specified to be a tab. The -headchar()- and -footchar()- options were added in a recent -listtab- update on SSC.

for instance, you might type

char a1[varname] "Grade 1";
char a2[varname] "Grade 2";
char a3[varname] "Grade 3";
listtab a1 a2 a3 using mytab.txt, rstyle(tabdelim) headchar(varname) replace;

This should create a header row containing the headers "Grade 1", "Grade 2" and "Grade 3" for variables a1, a2 and a3, respectively. You can, of course, name multiple characheristics in -headchar()- to make multiple header rows.

I hope this helps.

Best wishes

Roger

Roger B Newson BSc MSc DPhil
Lecturer in Medical Statistics
Respiratory Epidemiology and Public Health Group
National Heart and Lung Institute
Imperial College London
Royal Brompton Campus
Room 33, Emmanuel Kaye Building
1B Manresa Road
London SW3 6LR
UNITED KINGDOM
Tel: +44 (0)20 7352 8121 ext 3381
Fax: +44 (0)20 7351 8322
Email: r.newson@imperial.ac.uk
Web page: http://www.imperial.ac.uk/nhli/r.newson/
Departmental Web page:
http://www1.imperial.ac.uk/medicine/about/divisions/nhli/respiration/popgenetics/reph/

Opinions expressed are those of the author, not of the institution.

On 22/11/2012 21:14, Friedrich Huebler wrote:
Roger,

I see now that the line that you mentioned may be interpreted by Stata
as containing an unmatched ` character.

   local bgrades "`bgrades'Grade `j'`""t""'"

With this command I am trying to combine three separate elements
enclosed in double quotes. The first of those elements ends in a left
single quote (`):

   "`bgrades'Grade `j'`" + "t" + "'"

At the core the problem is that I am trying to create a macro with a
string that includes `t', text that should appear in the string as
such (a left single quote, then a lowercase t, then a right single
quote) instead of being interpreted as a macro. I thought I had
achieved this goal because the content of macro "agrades" is:

   Grade 1`t'Grade 2`t'Grade 3`t'

and the content of macro "bgrades" is:

   Grade 1`t'Grade 2`t'

The two macros combined appear as:

   Grade 1`t'Grade 2`t'Grade 3`t'Grade 1`t'Grade 2`t'

The line above is exactly what I need in the -listtab- command and
there doesn't appear to be an unmatched ` character. For this reason I
am puzzled by the syntax error. As an alternative I tried the line
below, with the left single quote now enclosed in double quotes:

   local bgrades "`bgrades'Grade `j'""`""t""'"

The combined macros look correct:

. di "`agrades'`bgrades'"
Grade 1`t'Grade 2`t'Grade 3`t'Grade 1`t'Grade 2`t'

However, -listtab- still stops with a syntax error.

   = file write __00000B `"`"' _n
invalid syntax

Friedrich


On Thu, Nov 22, 2012 at 2:19 PM, Roger B. Newson
<r.newson@imperial.ac.uk> wrote:
Your quoted line


file write __00000B `"Grade 1`"' _n

appears (to me) to contain an unmatched ` character, immediately following
the string "Grade 1". This may have originated from your line of code (in
Step 3)


      local bgrades "`bgrades'Grade `j'`""t""'"

which seems to me to contain an unmatched ` character just after `j' and
before "". I would expect this to cause some confusion somewhere, especially
as your unmatched ` is just before a ", and the pair of characters looks
like a left compound quote.

I hope this helps.

Best wishes

Roger

Roger B Newson BSc MSc DPhil
Lecturer in Medical Statistics
Respiratory Epidemiology and Public Health Group
National Heart and Lung Institute
Imperial College London
Royal Brompton Campus
Room 33, Emmanuel Kaye Building
1B Manresa Road
London SW3 6LR
UNITED KINGDOM
Tel: +44 (0)20 7352 8121 ext 3381
Fax: +44 (0)20 7351 8322
Email: r.newson@imperial.ac.uk
Web page: http://www.imperial.ac.uk/nhli/r.newson/
Departmental Web page:
http://www1.imperial.ac.uk/medicine/about/divisions/nhli/respiration/popgenetics/reph/

Opinions expressed are those of the author, not of the institution.


On 22/11/2012 17:26, Friedrich Huebler wrote:

I use Stata 11.2 with Windows 7 and would like to create a
tab-delimited text file similar to the one below.

Level A                    Level B           Sum
Grade 1  Grade 2  Grade 3  Grade 1  Grade 2
24.7     24.7     24.7     17.6     17.6     109.3
26.2     26.2     26.2     23.4     23.4     125.5

For this purpose I use the -listtab- Stata add-on by Roger Newson (see
-ssc d listtab-). The data is organized by level and grade, and the
number of grades per level varies. To automate the creation of the
table header I would like to use macros. When I include the macros in
the -listtab- command, Stata aborts with an "invalid syntax" error. I
don't know if this is due to the way I create the macros (e.g. the
combination of single and double quotes) or if this is a problem with
-listtab-.

The problem can be demonstrated with the commands below. Step 1
creates a meaningless test dataset that mimics the structure of my
original data. Step 2 creates a tab-delimited text file in the desired
format; here, the table header is specified manually in the -listtab-
command. Step 3 is an attempt to automate the creation of the second
row in the table header; the number of grades per level is unknown but
is not greater than 8, hence the loop over the numbers 1 to 8. Step 4
is the -listtab- command that fails with a syntax error.

Please note that the macros "agrades" and "bgrades", shown with the
-di- command at the end of Step 3, contain the same text as the table
header in Step 2:

Grade 1`t'Grade 2`t'Grade 3`t'Grade 1`t'Grade 2`t'

-set trace on- reveals that the error occurs after the following line
but I don't know how to interpret this information:

    = file write __00000B `"Grade 1`"' _n
invalid syntax
r(198);

Thank you for your help,

Friedrich


* Step 1: Test dataset
sysuse auto, clear
forval i = 1/3 {
    gen a`i' = mpg if trunk<13
}
forval i = 4/5 {
    gen b`i' = mpg if trunk>=13
}
collapse a1 - b5, by(foreign)
egen sum = rowtotal(a1 - b5)
format a1 - sum %5.1f

* Step 2: -listtab- table without syntax error
* Tab character for -listtab- header
local t = char(9)
* Tab-delimited text file
#delimit ;
listtab a1 - sum using "table1.txt",
    head("Level A`t'`t'`t'Level B`t'`t'Sum"
         "Grade 1`t'Grade 2`t'Grade 3`t'Grade 1`t'Grade 2`t'")
    rstyle(tabdelim) replace
;
#delimit cr

* Step 3: Create entries for a and b variables in table header
* Entry for a variables
local agrades ""
local j = 1
forval i = 1/8 {
    capture confirm variable a`i'
    if !_rc {
      local agrades "`agrades'Grade `j'`""t""'"
      local j = `j' + 1
    }
}
* Entry for b variables
local bgrades ""
local j = 1
forval i = 1/8 {
    capture confirm variable b`i'
    if !_rc {
      local bgrades "`bgrades'Grade `j'`""t""'"
      local j = `j' + 1
    }
}
* Show macros with table header entries
di "`agrades'`bgrades'"

* Step 4: -listtab- table with syntax error
* Tab character for -listtab- header
local t = char(9)
* Tab-delimited text file
#delimit ;
listtab a1 - sum using "table2.txt",
    head("Level A`t'`t'`t'Level B`t'`t'Sum"
         "`agrades'`bgrades'")
    rstyle(tabdelim) replace
;
#delimit cr
*
*   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