*! Date        : 10 Aug 2005
*! Version     : 1.06
*! Authors     : Adrian Mander
*! Email       : adrian.mander@mrc-hnr.cam.ac.uk
*! Description : convert columns of your stata data into the right format for bugs!!

*! example   bugsdat moth chi extra, dim(8,2) 

program define bugsdat
version 9.0
preserve
syntax [varlist] [if] [, File(string) Dim(string) Name(string) DATA(string asis) DATA2(string asis) ]

if "`if'"~="" qui keep `if'

cap log close
if "`file'"~="" qui log using "`file'",text replace
else  qui log using bugs.dat, replace text

if "`dim'"~="" local xtra "= structure(.Data"
else local xtra ""


local linesize `c(linesize)'

local nvar 1
di as text ""
local nxline "list(`data'"
di `"`nxline'"'
local nxline "`data2'"
foreach var of local varlist {

  if "`name'"~="" local navar:word `nvar' of `name'
  else local navar "`var'"
  if "`navar'"=="" local navar "`var'"

  cap confirm string variable `var'
  if _rc~=0 local comp "."
  else local comp `" "" "'

  /* For the first variable you don't need a comma before the variable name */ 
  if `nvar++'==1 {
    if length(`"`nxline'`navar'`xtra'=c("')<=`c(linesize)'  local nxline `"`nxline'`navar'`xtra'=c("'
    else {
      di `"`nxline'"'
      local nxline `"`navar'`xtra'=c("'
    }
  }
  else {
    if length(`"`nxline',`navar'`xtra'=c("')<=`c(linesize)' local nxline `"`nxline',`navar'`xtra'=c("'
    else {
      di `"`nxline'"'
      local nxline `",`navar'`xtra'=c("'
    }
  }

  /* loop through the lines of the variable and print values */
  forv i=1/`=_N'{
    if `i'==1 {				/* the first entry doesn't need commas */
       if `var'[`i']==`comp'  {
         if length(`"`nxline'NA"')<=`c(linesize)' local nxline `"`nxline'NA"'
         else {
           di `"`nxline'"'
           local nxline `"NA"'
         }
       }
       else {
         local temp = `var'[`i']
         if length(`"`nxline'`temp'"')<=`c(linesize)' local nxline `"`nxline'`temp'"'
         else {
           di `"`nxline'"'
           local nxline `"`temp'"'
         }
       }
    }
    else {
      if `var'[`i']==`comp' {
        if length(`"`nxline',NA"')<=`c(linesize)' local nxline `"`nxline',NA"'
         else {
           di `"`nxline'"'
           local nxline `",NA"'
         }
      }
      else {
        local temp =`var'[`i']
        if length(`"`nxline',`temp'"')<=`c(linesize)' local nxline `"`nxline',`temp'"'
        else {
          di `"`nxline'"'
          local nxline `",`temp'"'
        }
      }
    }
  }

  if length(`"`nxline')"')<=`c(linesize)' local nxline `"`nxline')"'
  else { 
    di `"`nxline'"'
    local nxline ")"
  }
  if "`dim'"~="" {
    if length(`"`nxline',.Dim=c(`dim'))"')<=`c(linesize)' local nxline `"`nxline',.Dim=c(`dim'))"'
    else {
      di `"`nxline'"'
      local nxline `",.Dim=c(`dim'))"'
    }
  }
}

if length(`"`nxline')"')<=`c(linesize)' di `"`nxline')"'
else { 
 di `"`nxline'"'
 di ")"
}

qui log close
restore
end