如何在SAS中扭曲(添加随机数)数据集



首先,我是第一次发帖,所以请耐心等待。我在这里和其他地方都找过答案,但还没有找到我想要的。我是SAS(和编程)的新手,所以我很可能找错了东西。

无论如何。我从事研究工作,目前是一份关于工作和健康的大型纵向问卷的数据经理,这项研究已经为同一参与者收集了五波数据。我们希望促进数据的传播和数据集的使用,因此我们希望根据当前数据创建一个教学数据集。教学数据集目前包括2000个随机选择的个体和463个变量——这只是主集合中量表和一些背景信息的子集。

我的问题是,在我们开始传播集合之前,必须满足的标准之一是,每个人都必须匿名,因此我们必须在数据集中包含随机错误。我已经对许多背景变量进行了分组,如收入、年龄、教育等。但我希望每个变量都至少包括一些随机误差。我想不出必须这么做。大多数变量如下所示:

Health_1 Health_n
       1        2
       4        2
       5        5
       .        1
       1        1

大多数变量的值可以在1到5之间(并且缺少)。我一直在考虑替换值(即,每1=2、每2=3等),但这会使最终结果变得糟糕,因为许多分析都会变得奇怪。对于每个变量,我想随机地将2000个观测值中的50个改变为变量可以假设的任何整数(1到5或缺失)。

有什么建议吗?我想我可以把变量y的第n个观测值都改为x,但这不是随机的。我想更改所有变量,而不是为每个变量编写代码。

我会使用数据步骤并随机选择要更改的观测值。

data want;
set have;
/*Random uniform - change seed as you see fit*/
_rand= ranuni(1); 
/*Select approximately 50/2000 = 2.5% records*/
if _rand > 50/2000 then do;
   /*Set variable to integer 0-5*/
   var1 = floor(6*ranuni(1));
   /*if set to 0, then set missing*/
   if var1 = 0 then 
      var1=.;
   /*Do this however many times you need*/
end;
/*do not put the _rand value into the output data*/
drop _rand;
run;

我不知道SAS,但我会建议一些应该通用的原理

  1. 读取字段的数据
  2. 对随机变量进行采样(通常随机数函数返回0到1之间的数字)
  3. 如果样本低于预先计算的数字,则对该数字进行移位,否则继续到下一个数字

移位时,再次对随机数进行采样,然后乘以6,向下取整。。。如果为6,则字段应为空。。

在这种情况下,预先计算的数字是2000/50。

最新更新