
Untitled
By: a guest on
Aug 1st, 2012 | syntax:
None | size: 1.17 KB | hits: 9 | expires: Never
Using do loops in R to create new variables
%do i=1 %to 100;
c_&i = a_&i + b_&i;
%end;
> a = 1:100
> b = runif(100)
> a[1]
> c = a + b
> c = rep(0,100)
> for(i in 1:100){
c[i]=a[i]+b[i]
}
c_1 = a_1 + b_1
for(i in 1:100){
tmpCmd = paste("C_",i,"= A_",i, sep = "")
eval(parse(text = tmpCmd))
}
rm(i, tmpCmd)
tmpCmd = paste("C_",i,"= A_",i," + B_",i, sep = "")
%macro recodevars;
data test;
set test;
%do i=1 %to 100;
c_&i = a_&i + b_&i;
%end;
run;
%mend recodevars;
%recodevars;
test <- data.frame(vara1=1:10,varb1=2:11,vara2=3:12,varb2=4:13)
for (i in 1:2) {
test[paste("varc",i,sep="")] <- test[paste("vara",i,sep="")] + test[paste("varb",i,sep="")]
}
> a_1 = 1
> a_2 = 2
> a_3 = 3
> a_4 = 4
> a_5 = 5
> b_1 = 1
> b_2 = 2
> b_3 = 3
> b_4 = 4
> b_5 = 5
> a.list <- ls(patter='a_*')
> a.list
[1] "a_1" "a_2" "a_3" "a_4" "a_5"
if(length(a.list)==length(b.list)){
c.list <- lapply(1:length(a.list), function(x) eval(parse(text=a.list[x])) + eval(parse(text=b.list[x])))
c.list.names <- paste('c', 1:length(a.list), sep='_')
lapply(1:length(c.list), function(x) assign(c.list.names[x], c.list[x], envir=.GlobalEnv))
}