4439 25

新手求助,帮帮忙 [推广有奖]

  • 0关注
  • 0粉丝

大专生

40%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
130 点
帖子
47
精华
0
在线时间
41 小时
注册时间
2010-4-14
最后登录
2014-10-19

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
要从excel中导入类似下面的数据,
IDYAGEHEIGHT
115156
117154
216166
214129
213154
319139
318145
414124
412146
515123
516154
514156
512157
618158
617160
………………
10018159

全部导入我会,我想做的是在 IDY 列 1-100编号里随机抽出50个编号的数据,然后仅使用这些数据,请教高手们如何写SAS程序做到这一点,非常感谢!!!!
二维码

扫码加我 拉你入群

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

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

关键词:新手求助 EXCEL sas程序 Eight 请教高手 求助 新手

回帖推荐

BraveMadMan 发表于7楼  查看完整内容

比如说你从Excel里导入的数据取名为have。下面程序中产生的want里面就是你要的随机产生的数据。 proc sql; create table want as select a.* from have as a, pick as b where a.idy = b.idy; quit;

本帖被以下文库推荐

沙发
BraveMadMan 发表于 2010-6-19 05:29:12 |只看作者 |坛友微信交流群
用下面的codes产生一个你要保留的IDY的list,然后去跟你跟从excel中导入的数据去match。

出处: www.webpages.uidaho.edu/~brian/sas_random_sample_example.pdf

  1. /* SAS program to pick a simple random sample */
  2. /* of 'nsamp' IDYs out of 'ntot' IDYs       */

  3. options nocenter ls=72;
  4. %let ntot = 100;
  5. %let nsamp = 50;
  6. data pick;
  7.   nbig=&ntot;
  8.   nlittle=&nsamp;
  9.   IDY=1;
  10.   do while(nlittle>0);
  11.     u=ranuni(0);
  12.     if u*nbig>nlittle then do;
  13.     nbig=nbig-1;
  14.   end;
  15.   else do;
  16.     nbig=nbig-1;
  17.     nlittle=nlittle-1;
  18.     output;
  19.   end;
  20. IDY=IDY+1;
  21.   end;
  22. proc print;
  23. var IDY;
  24. run;
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
jingju11 + 1 + 1 + 1 乐于助人啊
eijuhz + 100 热心回答他人疑问

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

使用道具

藤椅
BraveMadMan 发表于 2010-6-19 05:43:55 |只看作者 |坛友微信交流群
有另外一个更简单的办法:
  1. PROC SURVEYSELECT DATA=have OUT=pick METHOD=SRS SAMPSIZE=50 SEED=1234567; RUN;
复制代码
已有 1 人评分论坛币 收起 理由
peijiamei + 100 精彩帖子

总评分: 论坛币 + 100   查看全部评分

使用道具

3# BraveMadMan
谢谢您的帮助,您给的程序确实能随机挑出50条数据,但没有解决根本问题
是我没有表述清楚,数据里IDY这一列的编号是1-100的,但是并不是只有100行数据,每一个编号里的数据是不等的,例如编号1里可以有5组数据,编号2可以有3组数据,所以100个编号的数据可能有几百行,我想做的是从IDY这100个编号里随机选出50个编号(每个编号都有自己的几组数据,总体肯定大于50了)的数据参与后续的运算,希望继续得到您的帮助!非常感谢!!!!

使用道具

报纸
BraveMadMan 发表于 2010-6-20 18:07:46 |只看作者 |坛友微信交流群
橡树下的往事 发表于 2010-6-20 17:47
3# BraveMadMan
谢谢您的帮助,您给的程序确实能随机挑出50条数据,但没有解决根本问题
是我没有表述清楚,数据里IDY这一列的编号是1-100的,但是并不是只有100行数据,每一个编号里的数据是不等的,例如编号1里可以有5组数据,编号2可以有3组数据,所以100个编号的数据可能有几百行,我想做的是从IDY这100个编号里随机选出50个编号(每个编号都有自己的几组数据,总体肯定大于50了)的数据参与后续的运算,希望继续得到您的帮助!非常感谢!!!!
二楼的方法没解决你的问题吗?

使用道具

5# BraveMadMan

不好意思,我不知道如何去使用这段程序去match?您给指导下?谢谢
options nocenter ls=72; 还有,程序的这一句是什么意思?

使用道具

7
BraveMadMan 发表于 2010-6-20 18:34:41 |只看作者 |坛友微信交流群
橡树下的往事 发表于 2010-6-20 18:22
5# BraveMadMan

不好意思,我不知道如何去使用这段程序去match?您给指导下?谢谢
比如说你从Excel里导入的数据取名为have。下面程序中产生的want里面就是你要的随机产生的数据。

proc sql;
   create table want as
   select a.*
   from have as a, pick as b
   where a.idy = b.idy;
quit;
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

使用道具

7# BraveMadMan 谢谢!!
非常感谢!  已经达到了我的目的!!!!!

使用道具

7# BraveMadMan
不好意思啊,今天算是缠上您了,嘿嘿

我现在已经达到了原先的目的,已经随机挑出了50个编号的数据,但现在我还想另外使用其余的50个编号的数据(与之前挑出的50个编号不重叠,结合起来是原来的100个编号的数据),大师,如何做到这一点?请赐教!!!!

使用道具

10
BraveMadMan 发表于 2010-6-21 00:46:09 |只看作者 |坛友微信交流群
  1. proc sql;
  2.    create table NOTwant as
  3.    select a.*
  4.    from have as a, pick as b
  5.    where a.idy ^= b.idy;
  6. quit;
复制代码
9# 橡树下的往事

使用道具

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

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

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

GMT+8, 2024-5-1 15:31