Hi all,
I am struggling to loop over a large list of strings (not variables) in Stata v17 (MacOSx)
I want to import a list of files, run a meintreg model to adjust for batch effects, generate a variable with the model predictions and store the datasets in separte files.
My code looks like this, but already fails at recognizing the first element in the list "invalid 'abc'".
Any help will be appreciated!
I am struggling to loop over a large list of strings (not variables) in Stata v17 (MacOSx)
I want to import a list of files, run a meintreg model to adjust for batch effects, generate a variable with the model predictions and store the datasets in separte files.
My code looks like this, but already fails at recognizing the first element in the list "invalid 'abc'".
Code:
foreach X in "abc" "deg" "hij" "klm" { use "data_"`X'"", clear merge 1:1 pid using "file_2", update replace gen log`X'_low = log10(`X'_lower) gen log`X'_upp = log10(`X'_upper) * Model to estimate batch effects meintreg log`X'low log`X'upp i.experiment suppressYears || pid: * predictnl calls add to the data set the model results needed to adjust for batch effects predictnl adj1 = 0.2*(_b[2.experiment]+_b[3.experiment]+_b[3.experiment]+_b[5.experiment]) predictnl adj2 = 0.2*(_b[2.experiment]+_b[3.experiment]+_b[3.experiment]+_b[5.experiment]) - _b[2.experiment] predictnl adj3 = 0.2*(_b[2.experiment]+_b[3.experiment]+_b[3.experiment]+_b[5.experiment]) - _b[3.experiment] predictnl adj4 = 0.2*(_b[2.experiment]+_b[3.experiment]+_b[3.experiment]+_b[5.experiment]) - _b[4.experiment] predictnl adj5 = 0.2*(_b[2.experiment]+_b[3.experiment]+_b[3.experiment]+_b[5.experiment]) - _b[5.experiment] * generate logged values, with imputation for OOR values gen log10`X' = log10(`X'_upper) replace log10`X' = log10(`X'_upper/2) if `X'_lower==. replace log10`X' = log10(`X'_lower*2) if `X'_upper==. * generate values adjusted to average batch effect gen log10`X'adj = log10`X' + adj1 if experiment==1 replace log10`X'adj = log10`X' + adj2 if experiment==2 replace log10`X'adj = log10`X' + adj3 if experiment==3 replace log10`X'adj = log10`X' + adj4 if experiment==4 replace log10`X'adj = log10`X' + adj5 if experiment==5 drop if log10`X'adj==. save "`X'_analysis.dta", replace }
Comment