Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Use the lastvar local to read v1 v2 v3 variables from insheet with numeric names

    I am reading in GIS data provided by a soil scientist on my research team that is exported to csv files with numeric names (years only). I have created code to read in a list of csv files from different regions and rename the variables from the v1, v2, v3..... vn format to the format varname_year (here SPI_year) using the variable labels in the name. The problem is that I'd like to set this up to run a loop from the first variable v2 to the last where the last variable name changes depending on the data I'm importing. The loc lastvar: word `c(k)' of `r(varlist)' does not read the last variable since it is not a valid name. Is there a way for Stata to recognize the last variable "vn" in this list? My code is as follows:

    ***** This does not work. Error: nothing found where name expected
    cd "$mypath"
    foreach region in region1 region2 {
    insheet using "$mypath\SPI_`region'.csv", clear
    qui des
    loc lastvar: word `c(k)' of `r(varlist)'
    foreach v of varlist v2-`lastvar' {
    local x : variable label `v'
    rename `v' SPI_`x'
    }

    ***** This works but I added the name of the last variable
    cd "$mypath"
    foreach region in region1 region2 {
    insheet using "$mypath\SPI_`region'.csv", clear

    foreach v of varlist v2-v469 {
    local x : variable label `v'
    rename `v' SPI_`x'
    }

    My data look like this, where lotid is the unique identifier:
    lotid v2 v3 v4 v5 v6 v7 v8
    13008 1.7 2.34 0.75 0.80 1.23 3.78 0.85

  • #2
    Your mistake is using
    Code:
    quietly describe
    when you needed
    Code:
    quietly ds
    or
    Code:
    quietly describe, varlist
    As a consequence the local lastvar is undefined, and the foreach command is interpreted as
    Code:
    foreach v of varlist v2- {
    leading directly to the error message you quoted in your code.

    See
    Code:
    help des
    help ds
    for details on these similar commands.

    Comment


    • #3
      Alternative:
      Code:
      foreach v of varlist * {
          
          if ( "`v'" == "v1" ) continue
          local x : variable label `v'
          rename `v' SPI_`x'
      }
      For posting code see Stata list FAQ 12.3 How to use CODE delimiters.

      Comment

      Working...
      X