楼主: Imasasor
5867 11

怎么用程序随机生成名字 [推广有奖]

  • 1关注
  • 64粉丝

VIP

已卖:215份资源

学科带头人

33%

还不是VIP/贵宾

-

TA的文库  其他...

超哥喜欢的文章

威望
1
论坛币
47033 个
通用积分
3.1376
学术水平
238 点
热心指数
246 点
信用等级
231 点
经验
37132 点
帖子
849
精华
3
在线时间
2235 小时
注册时间
2012-7-4
最后登录
2024-10-10

初级学术勋章 初级热心勋章 初级信用勋章 中级热心勋章 中级学术勋章

楼主
Imasasor 发表于 2013-1-4 18:13:36 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
有若干个姓名,如下:
  1. 燕玉萍
  2. 张春红
  3. 安淑芝
  4. 冯莉
  5. 闫秀英
  6. 商英
  7. 赵淑梅
  8. 刘秉臻
  9. 胡瑞兰
  10. 邹欣梅
  11. 臧雅珍
  12. 闫洪芝
  13. 刘志珠
  14. 时桂荣
  15. 孙秀萍
  16. 刘玉荣
  17. 刘德明
  18. 李志刚
  19. 刘敏
  20. 邱叶
  21. 张栓荣
  22. 李慧君
  23. 张东
  24. 李有美
  25. 田金建
  26. 英光新
  27. 马垂贞
  28. 吴鸣娟
  29. 潘雅珍
  30. 陈秋玲
复制代码
现在想依次生成500个名字的数据集,名字从上面的名字中随机选择,注意:一定保证是随机选择。每个观测获得上述每个名字的机会均等。当然一个名字可以用多次。
咋做?
我能想到利用随机数选取什么的,但是不会写,求各位高手帮帮忙。
第二,在解决问题的基础上,如何最优化速度? (如果到大数据集中做速度还是要考虑的)

二维码

扫码加我 拉你入群

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

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

关键词:解决问题 数据集 随机数 大数据 最优化 程序

回帖推荐

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

data 步也可以。更详细的可以参见: http://blog.sina.com.cn/s/blog_41889b9001016663.html

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

我原来写的宏,供参考。可以实现分放回和不放回的两种情况。

ziyenano 发表于3楼  查看完整内容

data ex; do i=1 to 1000; output; end; run; proc sql outobs=500; create table ex1 as select * from ex order by ranuni(0); quit;

本帖被以下文库推荐

欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

沙发
新人2012 发表于 2013-1-4 18:19:59
考虑下proc surveyselect

藤椅
ziyenano 发表于 2013-1-4 18:25:50
data ex;
do i=1 to 1000;
output;
end;
run;

proc sql outobs=500;
create table ex1 as
select * from ex order by ranuni(0);
quit;
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
bakoll + 3 + 3 精彩帖子
a6566792 + 1 + 1 + 1 精彩帖子

总评分: 经验 + 3  论坛币 + 3  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
webgu 发表于 2013-1-4 18:42:32
  1. data  demo;
  2. input name $;
  3. datalines;
  4. 燕玉萍
  5. 张春红
  6. 安淑芝
  7. 冯莉
  8. 闫秀英
  9. 商英
  10. 赵淑梅
  11. 刘秉臻
  12. 胡瑞兰
  13. 邹欣梅
  14. 臧雅珍
  15. 闫洪芝
  16. 刘志珠
  17. 时桂荣
  18. 孙秀萍
  19. 刘玉荣
  20. 刘德明
  21. 李志刚
  22. 刘敏
  23. 邱叶
  24. 张栓荣
  25. 李慧君
  26. 张东
  27. 李有美
  28. 田金建
  29. 英光新
  30. 马垂贞
  31. 吴鸣娟
  32. 潘雅珍
  33. 陈秋玲
  34. ;

  35. %macro randsample_proc(dsin,dsout,Replacement,SampleSize);
  36. %if %upcase("&Replacement")="YES"  %then%do;
  37.   proc surveyselect data=&dsin out=&dsout method=urs  n=&SampleSize;
  38.   run;
  39. %end;
  40. %else %if %upcase("&Replacement")="NO"  %then%do;
  41. proc surveyselect data=&dsin out=&dsout method=srs  n=&SampleSize;
  42. run;
  43. %end;
  44. %else %put ERROR: Replacement shout be  yes or no ;
  45. %mend randsample_proc;

  46. %randsample_proc(demo,want,yes,10);
复制代码
我原来写的宏,供参考。可以实现分放回和不放回的两种情况。
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
bakoll + 3 + 3 精彩帖子
数据分析师3K + 20 + 1 + 1 + 1 观点有启发

总评分: 经验 + 3  论坛币 + 23  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

报纸
webgu 发表于 2013-1-4 18:50:37
data 步也可以。
  1. %macro randsample_data(dsin,dsout,SampleSize);
  2.   data &dsout(drop=i);
  3.     do i=1to &SampleSize;
  4.         PickIt=ceil(ranuni(123)*TotObs);
  5.              set &dsin point=PickIt   nobs=TotObs;
  6.         output;
  7.       end;
  8.       stop;
  9. run;
  10. %mend randsample_data;

  11. %randsample_data(demo,want,10);
复制代码
更详细的可以参见: http://blog.sina.com.cn/s/blog_41889b9001016663.html
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

地板
Imasasor 发表于 2013-1-4 19:10:44
ziyenano 发表于 2013-1-4 18:25
data ex;
do i=1 to 1000;
output;
总有一种人,会让人望其项背
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

7
Imasasor 发表于 2013-1-4 19:18:43
ziyenano 发表于 2013-1-4 18:25
data ex;
do i=1 to 1000;
output;
我是从30个数据里,把它随机成500个,跟高手的不太一样。
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

8
ziyenano 发表于 2013-1-4 22:00:52
是我看错啦~有放回抽样的话,webgu的set  point是个很好的选择

9
pobel 在职认证  发表于 2013-1-5 09:05:58
data name;
   input name & $20.;
   cards;
San Zhang
Si Li
Mazi Wang
Haha Zhao
One Qian
Two Sun
Three Li
Four Zhou
Five Wu
Six Zheng
;

*** Select record randomly;
data test;
    if 0 then set name nobs=nobs;
        keep obs;
        do i=1 to 500;
           obs=ceil(ranuni(0)*nobs);
           output;
        end;
        stop;
run;

*** Get how many times a record was selected;
proc sql;
    create table test1 as
         select distinct obs,count(*) as number
            from test
                group by obs;
quit;

*** Merge and output;
data wanted;
    merge name test1;
        drop obs number;
        do _n_=1 to number;
           output;
        end;
run;


已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
数据分析师3K + 20 + 1 + 1 + 1 分析的有道理

总评分: 论坛币 + 20  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

和谐拯救危机

10
Bridgenc 发表于 2013-1-5 21:00:37
data name;
    input name & $20.;
    cards;
San Zhang
Si Li
Mazi Wang
Haha Zhao
One Qian
Two Sun
Three Li
Four Zhou
Five Wu
Six Zheng
;
run;

data name2;
  set name;
  random=ranuni(0);
run;

proc sort data=name2;
  by random;
run;

data name3;
  set name2(obs=5);
  drop random;
run;

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

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