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]
st: Macros in -listtab- header: syntax error
From 
 
Friedrich Huebler <[email protected]> 
To 
 
[email protected] 
Subject 
 
st: Macros in -listtab- header: syntax error 
Date 
 
Thu, 22 Nov 2012 12:26:01 -0500 
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/