楼主: tiantianwo
3411 10

sas数据提取求助! [推广有奖]

  • 0关注
  • 1粉丝

已卖:490份资源

本科生

52%

还不是VIP/贵宾

-

威望
0
论坛币
8393 个
通用积分
12.2252
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
1174 点
帖子
51
精华
0
在线时间
67 小时
注册时间
2005-4-1
最后登录
2011-10-4

楼主
tiantianwo 发表于 2009-1-11 16:41:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

数据是三个变量组成,需要提取的数据包括:(1)当n=1时的数据;(2)如果n不等于1 则提取最大的n,这里最大的是相对于n不等于1区间而言,即,比如n=1时则提取该数据,第二个则应该提取的是n=5的数据。。。。。

a       n    b

0.01   1  0.01
0.01   2  0.02
0.03   3  0.05
0.11   4  0.16
0.07   5  0.23
0.00   1  0.00
0.05   1  0.05
0.00   2  0.05
0.00   6 0.05
0.00   1  0.00
0.00   2  0.00
0.00   3  0.00
0.00   4  0.00
0.00   5  0.00
0.03   1  0.03
0.00   2  0.03
0.00   3  0.03
0.01   4  0.04
0.00   5  0.04
0.01   1  0.01
0.05   2  0.06
0.05   3  0.11
0.05   4  0.16
0.00   1  0.00
0.00   2  0.00

想了很久,考虑用do while语句,但数据量比较大,大约有1万个左右,运算太慢了,请大家看看有何更好的方法吗?多谢!

二维码

扫码加我 拉你入群

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

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

关键词:数据提取 while 最大的 数据包 Hil 数据 SAS

回帖推荐

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

data a;  input a n b @@;  cards;0.01   1  0.01 0.01   2  0.02 0.03   3  0.05 0.11   4  0.16 0.07   5  0.23 0.00   1  0.00 0.05   1  0.05 0.00   2  0.05 0.00   6  0.05 0.00   1  0.00 0.00   2  0.00 0.00   3  0.0 ...

yongyitian 发表于8楼  查看完整内容

最后一步可否用data e; set c; by type;if first.type or last.type; run; [此贴子已经被作者于2009-1-12 10:13:21编辑过]

本帖被以下文库推荐

沙发
rdzr 发表于 2009-1-11 17:26:00

给LZ想出下 笨办法,请参考,程序如下:

data a1 a2;
      set a; /*假定LZ的数据集为a*/
          if n=1 then output a1;
           else output a2;
run;


proc sort data=a2;
           by descending n;
proc print data=a2; /*查看排序的结果,看最大的 n 是多少,此外假定是大的 n 是 nmax*/
run;


data a2;
     set a2;
  if  n=nmax then output;
run;
proc print data=a2; /*查看抽取的结果是不是期望的最大 n */
run;

藤椅
tiantianwo 发表于 2009-1-11 17:41:00

谢谢楼上帮助,可能我没有将问题说的很清楚,提取数据的困难其实在于在前后两个n等于1中间选择其最大值,比如

0.01   1  0.01
0.01   2  0.02
0.03   3  0.05
0.11   4  0.16
0.07   5  0.23
0.00   1  0.00

这时候就要提取三个数,即

0.01   1  0.01

0.07   5  0.23

0.00   1  0.00

因此拆分数据可能难以实现要求。

板凳
xuwei2007 发表于 2009-1-11 17:43:00
[em03]

[此贴子已经被作者于2009-1-11 17:52:52编辑过]

报纸
xuwei2007 发表于 2009-1-11 18:35:00

data a;
  input a n b @@;
  cards;
0.01   1  0.01
0.01   2  0.02
0.03   3  0.05
0.11   4  0.16
0.07   5  0.23
0.00   1  0.00
0.05   1  0.05
0.00   2  0.05
0.00   6  0.05
0.00   1  0.00
0.00   2  0.00
0.00   3  0.00
0.00   4  0.00
0.00   5  0.00
0.03   1  0.03
0.00   2  0.03
0.00   3  0.03
0.01   4  0.04
0.00   5  0.04
0.01   1  0.01
0.05   2  0.06
0.05   3  0.11
0.05   4  0.16
0.00   1  0.00
0.00   2  0.00
;
run;


data b;
   set a;
   if n=1 then do;
     type+1;
  end;
  else;
run;


proc sort data=b out=c;
  by type n;
  run;

  data d (drop=type);
  merge c c;
  by type;
  if first.type=1 or last.type=1;
  run;

d 就是所需要的数据集。

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

地板
wxq1638 发表于 2009-1-11 19:56:00
以下是引用xuwei2007在2009-1-11 18:35:00的发言:

data a;
  input a n b @@;
  cards;
0.01   1  0.01
0.01   2  0.02
0.03   3  0.05
0.11   4  0.16
0.07   5  0.23
0.00   1  0.00
0.05   1  0.05
0.00   2  0.05
0.00   6  0.05
0.00   1  0.00
0.00   2  0.00
0.00   3  0.00
0.00   4  0.00
0.00   5  0.00
0.03   1  0.03
0.00   2  0.03
0.00   3  0.03
0.01   4  0.04
0.00   5  0.04
0.01   1  0.01
0.05   2  0.06
0.05   3  0.11
0.05   4  0.16
0.00   1  0.00
0.00   2  0.00
;
run;


data b;
   set a;
   if n=1 then do;
     type+1;
  end;
  else;
run;


proc sort data=b out=c;
  by type n;
  run;

  data d (drop=type);
  merge c c;
  by type;
  if first.type=1 or last.type=1;
  run;

d 就是所需要的数据集。

干的漂亮!昨天晚上,我看到array(本坛下载的)内容,才知道first和last有妙用。可能是专门用于洗涤该类型数据的。

由此也应该能简化本人前几天写的那个游程检验代码。

7
tiantianwo 发表于 2009-1-11 20:30:00
谢谢,各位的热心帮助,5楼的办法很好!问题已经解决!

8
yongyitian 发表于 2009-1-12 10:08:00

最后一步可否用

data e;

set c;

by type;

if first.type or last.type; run;

[此贴子已经被作者于2009-1-12 10:13:21编辑过]

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

9
wxq1638 发表于 2009-1-12 19:51:00
以下是引用yongyitian在2009-1-12 10:08:00的发言:

最后一步可否用

data e;

set c;

by type;

if first.type or last.type; run;


干的同样精彩!!!

我要是班主,肯定给大伙送mb

10
freeseaman 发表于 2009-1-16 04:24:00
good to learn.

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

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