我试图匿名化数据并用一些随机数替换client_rating(所以我不发布实际数据)但保留原始分布和值范围
Client_Id Key Rating
001 111 2
001 112 3
001 113 10
002 111 1
002 112 4
002 112 9
的值范围
Key=111 is from 1 thru 4
key=112 is from 1 thru 5
key=113 is from 1 thru 11
我正在寻找使用指定范围内的SAS和/或R对数据进行匿名化。我宁愿保留原始数据的均值和标准差,但不仅要改变原始值。我希望在指定的范围之间随机分配数字。
例如,按键111可以具有1到4之间的任何等级,但在现有数据中,分配的等级值仅为1和2.
感谢任何帮助。 提前谢谢。
答案 0 :(得分:1)
proc sgplot
在SAS 9.4 M2中有jitter
选项。
proc sgplot data=have;
scatter x=key y=rating / jitter jitterwidth=0.85;
run;
jitterwidth
定义为
抖动空间的宽度为中点的一部分 间距或最小间隔宽度。
如果您需要手动抖动,可以通过简单地通过随机小分数增加或减少该值来执行数据步骤。我建议使用带有rand
参数的uniform
函数。例如,以下代码将从client_rating
中随机添加或减去0到1之间的数字。这应该有效地使y
方向的数据抖动。您也可以在x
方向执行此操作以添加其他维度。
data want;
set have;
/* y jitter */
if(rand('Uniform') > 0.5) then client_rating_jit = client_rating + rand('Uniform');
else client_rating_jit = client_rating - rand('Uniform');
/* optional: x jitter */
if(rand('Uniform') > 0.5) then key_jit = key + rand('Uniform');
else key_jit = key - rand('Uniform');
run;
如果您需要更多或更少的抖动,您可以用数学方式更改均匀分布的最小值/最大值:
min + (1+max - min)*rand('Uniform')