我想做一些非常简单的事情。我只是想将变量的值重复设置为数值x次。在R我可以做类似的事情:
drug <- c(rep(0, times = 10), rep(1, times = 10))
会产生:
[1] 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
到目前为止,我所拥有的最好的是:
data drug_data (drop = i);
do i = 1 to 10;
drug = 0;
output;
end;
do i = 1 to 10;
drug = 1;
output;
end;
run;
这是最好的解决方案吗?感谢
答案 0 :(得分:1)
这样的事情可能会产生20个变量drug1-drug20。
34 data _null_;
35 array drug[20] (10*0 10*1);
36 put drug[*];
37 run;
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
或者这是怎么回事,因为显然矢量很高。
data drug;
array d[20] _temporary_ (10*0 10*1);
do _n_ = 1 to dim(d);
drug=d[_n_];
output;
end;
run;
答案 1 :(得分:0)
SAS不是矢量语言,因此概念并不完全相同。
如果你想让一个变量包含这样的字符串,那就太简单了:
data have;
drug = repeat('1 ',9)||repeat('0 ',9);
run;
repeat
就像rep
中的r
一样,除了你传递的数字比你想要的数字少一个(因为它需要原始值然后再添加N个副本那个)。
但是,如果您想要一些可以执行某些操作的内容,则可能需要创建多个行。矢量中的元素通常粗略地转换为SAS中的行。 SAS的工作方式大致类似于r data.frame
对象,其中列/变量等同于data.frame中的向量,而观察与其元素等效。
你在循环中使用output
语句;这会创建新的观察/行/元素。
data have;
drug=1;
do _n_=1 to 10;
output;
end;
drug=0;
do _n_ = 1 to 10;
output;
end;
run;
当然,如果您不关心排序,可以将所有内容放在一个1&gt; 10循环中,而不是其中两个。