楼主: rockfido
5125 28

[程序分享] HOW TO DEAL WITH THIS ONE (SURVEYSELECT) [推广有奖]

11
rockfido 在职认证  发表于 2010-3-2 11:06:57
i just tried ur way, works perfect for me. thank you so much!!



7# soporaeternus

12
rockfido 在职认证  发表于 2010-3-2 11:16:54
不好意思,还有一个比较低级的问题。。。。这个if r<=%sysevalf(&rto);是如何用的?刚查了%sysevalf的用法:%SYSEVALF(expression<, conversion-type>),那这里<, conversion-type>的DEFAULT值是啥?另外,是不是如果我只要一半的DATA SET,那么&RTO就是0.5?


谢谢!!




7# soporaeternus

13
醉_清风 发表于 2010-3-2 11:22:22
%sysevalf 是执行宏变量的逻辑运算
要一半就是&RTO取0.5
从来不需要想起 永远也不会忘记

14
rockfido 在职认证  发表于 2010-3-2 11:33:08
试了一下,按照7楼的例子,RTO=0.2,得到的新的DATA SET并不是取了20%的DATA啊。。。。

用自己的DATA SET试了一下,RTO=0.5,确实是取了一半的DATA。。。。

13# 醉_清风

15
soporaeternus 发表于 2010-3-2 11:42:39
%sysevalf第二选项默认应该是浮点值本身,不作任何变化

抽样部分的程序我等等改下,可以变成正好20%...
Let them be hard, but never unjust

16
rockfido 在职认证  发表于 2010-3-2 12:05:55
非常感谢!!



15# soporaeternus

17
soporaeternus 发表于 2010-3-2 13:49:58
  1. /*RTO of SURVEYSELECT*/

  2. %let rto=0.01;



  3. /*RST*/
  4. proc sql;
  5.         select count(distinct Grp) into:Grp_Cnt from p_2;
  6. quit;
  7. %put &Grp_Cnt;


  8. data p_3;
  9. retain r Get_Ind 0 Smp_Sze %sysevalf(&Grp_Cnt*&Rto) Grp_Cnt_Lft &Grp_Cnt ;
  10. set p_2;
  11. by Grp;

  12. if first.Grp then do;
  13.         Get_Ind=0;
  14.         r=ranuni(999);
  15.         if r<=Smp_Sze/Grp_Cnt_Lft then do;
  16.                 Get_Ind=1;
  17.                 Smp_Sze=Smp_Sze-1;
  18.         end;
  19.         Grp_Cnt_Lft=Grp_Cnt_Lft-1;
  20. end;
  21. if Get_Ind=1;
  22. keep ID;
  23. run;
复制代码
貌似可以
看看......
已有 1 人评分学术水平 热心指数 收起 理由
醉_清风 + 1 + 1 很好很强大

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

Let them be hard, but never unjust

18
醉_清风 发表于 2010-3-2 14:11:08
学习了 很强大  发现RETAIN 真的很有用
从来不需要想起 永远也不会忘记

19
voiceofsound 发表于 2010-3-2 14:14:32
我也想知道诶~~~~~~

20
rockfido 在职认证  发表于 2010-3-2 22:20:17
17# soporaeternus

THANK YOU SO MUCH THOUGH I CANT UNDERSTAND 100%.....BUT THAT'S MY PROBLEM....LOL

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 17:04