楼主: madkoala
6173 7

[原创博文] 如何“只用“data步取最大最小值 [推广有奖]

  • 0关注
  • 1粉丝

大专生

98%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
0
学术水平
3 点
热心指数
0 点
信用等级
0 点
经验
902 点
帖子
57
精华
0
在线时间
72 小时
注册时间
2009-4-7
最后登录
2018-12-28

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请教各位,现有如此考题一道:
不使用proc步从变量A中选取随机一人(因此不能procsort不能procsql),原始dataset只有abcde五个人的名字列表。
估计其目的是想考核考生的array或retain用法知识。我就打算给每人一个随机值,然后选取最大或最小值的那个…… 应该也算是随机选取的吧?

但现在我做到这一步:变量A为ace,boy,cat,dog,egg五个人名,变量B是一栏随机值(使用ranuni或uniform生成的数)
data random;
set name;
random=uniform(99);
retain maxs;
maxs=max(random, maxs);

这样dataset就变成(random的值我瞎编的)
name     random  maxs
ace         0.7         0.7
boy        0.3         0.7
cat         0.2         0.7
dog        0.9         0.9
egg        0.8         0.9

到这一步我就走不下去了,如何才能选取为0.9的那个值呢,如果最后一行加上
if maxs=random; 的话,那第一条不是最大的也会被包括进去,请问如何进行下一步的操作呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:data步 Data 最小值 Uniform dataset 如何 知识

回帖推荐

webgu 发表于2楼  查看完整内容

楼主把简单问题复杂化了。随机选取一个观测,可以参考以下代码:或者见下面链接: http://blog.sina.com.cn/s/blog_41889b9001016663.html
沙发
webgu 发表于 2012-8-31 20:28:16 |只看作者 |坛友微信交流群
楼主把简单问题复杂化了。随机选取一个观测,可以参考以下代码:
  1. data demo;
  2. input a $;
  3. datalines;
  4. ace
  5. boy
  6. cat
  7. dog
  8. egg
  9. ;

  10. data want;
  11. pickid=ceil(ranuni(123)*Totobs);
  12. set demo point=pickid  nobs=Totobs;
  13. output;
  14. stop;
  15. run;
复制代码
或者见下面链接:
http://blog.sina.com.cn/s/blog_41889b9001016663.html
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

藤椅
madkoala 发表于 2012-8-31 21:29:03 |只看作者 |坛友微信交流群
多谢大侠,之前google了几个”以data步进行简单抽样“的搜索,找到的都是surveyselect和用retain的,唯独没有搜索到您这篇博客上的内容,已收藏您的博客!

不过在下还有点疑问,虽然结果是出来了,但是依在下的水平对于您这段代码我实在无法彻底的理解,能否麻烦您简单解释下
point=pickid  nobs=Totobs这里和最后stop 是什么意思吗

使用道具

板凳
webgu 发表于 2012-8-31 23:37:11 |只看作者 |坛友微信交流群
madkoala 发表于 2012-8-31 21:29
多谢大侠,之前google了几个”以data步进行简单抽样“的搜索,找到的都是surveyselect和用retain的,唯独没 ...
客气。这两个都是set语句的选项。常配合起来用于非顺序读取dataset里的观测。point是指针,指定set语句读第几条观测。NOBS存储的是DATASET的数集观测数。当非顺序读取时,SAS DATA步无法自动结束,需要STOP语句.
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

报纸
madkoala 发表于 2012-9-1 00:01:52 |只看作者 |坛友微信交流群
连起来看终于彻底理解了!!

使用道具

如果用rand('UNIFORM'),好象比用ranuni(123)更好?因为用ranuni(123),每次选出来的会是同一个,而用rand('UNIFORM'),每次选出来的都会不一样!

使用道具

7
bobguy 发表于 2012-9-1 05:56:45 |只看作者 |坛友微信交流群
The data set sample contain the point of record having the minimum value.

data demo sample(keep=Nobs);
retain min 1 Nobs .;
infile cards eof=eof;
input a $;
seed=1453;
n+1;
ran=ranuni(seed);
if ran<min then do;
   min=ran;
   Nobs=n;
end;
output demo;
return;
eof: output sample;  
datalines;
ace
boy
cat
dog
egg
;
proc print data=demo;run;
proc print data=sample;run;

使用道具

8
webgu 发表于 2012-9-1 09:13:37 |只看作者 |坛友微信交流群
情迷仲夏夜 发表于 2012-9-1 02:57
如果用rand('UNIFORM'),好象比用ranuni(123)更好?因为用ranuni(123),每次选出来的会是同一个,而用rand( ...
修改种子为0即可。


41   data want;
42   do i=1 to 5;
43    pickid=ceil(ranuni(0)*Totobs);
44    set demo point=pickid  nobs=Totobs;
45    put i a;
46    end;
47    stop;
48   run;

1 boy
2 cat
3 ace
4 cat
5 egg
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

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

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

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

GMT+8, 2024-4-28 17:31