楼主: bhhk
19884 20

求助用SAS生成缺失数据 [推广有奖]

11
mingfeng07 学生认证  发表于 2015-1-7 16:11:46 |只看作者 |坛友微信交流群
teqel 发表于 2015-1-7 14:02
研究半天,终于看懂了。大神确实厉害。
我觉得if 1=0这句就是只把变量带进来,但是不带进来数据,这样写 ...
原来如此,受教了。

使用道具

12
bhhk 发表于 2015-1-7 19:42:52 |只看作者 |坛友微信交流群
mingfeng07 发表于 2015-1-7 00:16
如果想重复一百次,在外面套个宏循环就行了。
谢谢大神的回复 可是有些地方我还是不太懂,能不能麻烦你给我解释一下15 16 21   29~32这几句,跪谢

使用道具

13
mingfeng07 学生认证  发表于 2015-1-7 23:28:19 |只看作者 |坛友微信交流群
bhhk 发表于 2015-1-7 19:42
谢谢大神的回复 可是有些地方我还是不太懂,能不能麻烦你给我解释一下15 16 21   29~32这几句,跪谢[em23 ...
首先将所有变量生成宏变量,然后确定缺失比例,r表示去掉缺失比例之后的选中比例,接下来是产生包含缺失值的变量。

使用道具

14
jingju11 发表于 2015-1-8 06:33:55 |只看作者 |坛友微信交流群
mingfeng07 发表于 2015-1-7 16:11
原来如此,受教了。
Thank you for all.
"if 1=0 then set a;" is to make the variables' positions in new dataset same as the original data set a.

JingJu

使用道具

15
bhhk 发表于 2015-1-8 19:17:43 |只看作者 |坛友微信交流群
mingfeng07 发表于 2015-1-7 23:28
首先将所有变量生成宏变量,然后确定缺失比例,r表示去掉缺失比例之后的选中比例,接下来是产生包含缺失值 ...
谢谢  热心的大神

使用道具

16
bhhk 发表于 2015-1-11 08:54:03 |只看作者 |坛友微信交流群
mingfeng07 发表于 2015-1-7 00:16
如果想重复一百次,在外面套个宏循环就行了。
你好 我还有个问题 想请教你 我用 这个程序处理另一个数据  选择了其中14个变量(第32~45个变量)处理成缺失变量   为什么只有前9个变量生成了 缺失值   后4个变量没有变

使用道具

17
mingfeng07 学生认证  发表于 2015-1-11 10:01:12 |只看作者 |坛友微信交流群
bhhk 发表于 2015-1-11 08:54
你好 我还有个问题 想请教你 我用 这个程序处理另一个数据  选择了其中14个变量(第32~45个变量)处理成缺 ...
需要改动一下,这下可以了:
  1. data a(drop=i j);
  2. array a{50} x1-x50;
  3. do i=1 to 50;
  4.   do j=1 to 50;
  5.   a(j)=rannor(0);
  6.   end;
  7.   output;
  8. end;
  9. run;
  10. %macro test(lib,data,rate);
  11. proc datasets lib=&lib nodetails nolist;
  12. contents data=&data out=b;
  13. quit;
  14. proc sql noprint;
  15. select count(*) into:count from b;
  16. select name into:var1-:var%left(&count) from b;
  17. quit;
  18. %macro name;
  19. %do i=1 %to 14; %eval(&i+31) %end;
  20. %mend;
  21. %let newvar=%name;
  22. %put &newvar;
  23. %do i=1 %to &count.;
  24. %if %sysfunc(indexw(&newvar.,&i.,' '))>0 %then %do;
  25. %let r=%sysevalf(1-&rate.);
  26. %end;
  27. %else %do;
  28. %let r=1;
  29. %end;
  30. proc surveyselect data=a(keep=&&var&i.) out=c outall method=srs samprate=&r noprint;
  31. run;
  32. %if &i.=1 %then %do;
  33. data test(drop=selected);
  34. set c;
  35. if selected=0 then &&var&i.=.;
  36. run;
  37. %end;
  38. %else %do;
  39. data test(drop=selected);
  40. set test;
  41. set c;
  42. if selected=0 then &&var&i.=.;
  43. run;
  44. %end;
  45. %end;
  46. proc delete data=b c;
  47. run;
  48. %mend;
  49. %test(work,a,0.1);
复制代码

使用道具

18
wuzubin123 发表于 2015-1-28 22:16:38 |只看作者 |坛友微信交流群
谢谢分享

使用道具

19
redbraven 发表于 2015-1-31 15:50:25 |只看作者 |坛友微信交流群
关注一下。。。。。。。。。。。。。

使用道具

20
wpfwxn 发表于 2015-2-2 15:28:24 |只看作者 |坛友微信交流群
mingfeng07 发表于 2015-1-7 10:47
京剧大神厉害,利用一次proc surveyselect过程,产生重复样本,避免了宏循环,把所有的数据都放在selecto ...
是执行的,引用另外一个数据集的变量

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-20 10:27