将数值分配给x次

时间:2016-03-22 19:19:32

标签: sas

我想做一些非常简单的事情。我只是想将变量的值重复设置为数值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;

这是最好的解决方案吗?感谢

2 个答案:

答案 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;

enter image description here

答案 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循环中,而不是其中两个。