楼主: peijiamei
3210 9

[程序分享] 如何找到序列的最小的大于等于o的数值? [推广有奖]

已卖:299份资源

学科带头人

75%

还不是VIP/贵宾

-

威望
3
论坛币
26157 个
通用积分
12.7133
学术水平
217 点
热心指数
343 点
信用等级
210 点
经验
75401 点
帖子
1099
精华
1
在线时间
2016 小时
注册时间
2007-11-15
最后登录
2016-3-21

楼主
peijiamei 发表于 2010-7-29 09:41:13 |AI写论文
10论坛币
codet
1-5
1-4
1-3
1-2
1-1
10
11
12
13
2-5
2-4
2-3
22
23
24


生成的表格是:
codet
10
22


其中t是code相同的那些数值中大于等于0的最小数。
向高手致敬!

最佳答案

soporaeternus 查看完整内容

如果code中没有大于等于0的数将导致code缺失,再补个code全量left join就可以了
关键词:code COD ODE 序列 数值
我的微博:http://t.sina.com.cn/1087192374
欢迎互相加关注!

沙发
soporaeternus 发表于 2010-7-29 09:41:14
  1. proc sql;
  2.         select code,min(t) as t from a where t>=0 group by code;
  3. quit;
复制代码
如果code中没有大于等于0的数将导致code缺失,再补个code全量left join就可以了
Let them be hard, but never unjust

藤椅
ki_ki_shen 发表于 2010-7-29 09:59:36
未命名.bmp
最后剩下的有值的行就是要的结果
楼下用SAS的都比较高级 呵呵
已有 1 人评分论坛币 热心指数 收起 理由
peijiamei + 10 + 1 不是sas但是也很好!

总评分: 论坛币 + 10  热心指数 + 1   查看全部评分

板凳
rockfido 在职认证  发表于 2010-7-29 10:08:45
proc sql;
create table b as
select code, min(t) as t
from a
where t >=0
group by code;
quit;
已有 1 人评分热心指数 收起 理由
peijiamei + 1 雷同答案

总评分: 热心指数 + 1   查看全部评分

报纸
soporaeternus 发表于 2010-7-29 10:13:14
  1. proc sort data=a;by code descending t;run;quit;

  2. data c(drop=t rename=(s=t));
  3.         set a;
  4.         by code descending t;
  5.         retain s;
  6.         if first.code then s=.;
  7.         if t>=0 then s=t;
  8.         if last.code then output;
  9. run;
复制代码
貌似解决了上面的问题
Let them be hard, but never unjust

地板
hopewell 发表于 2010-7-29 10:42:09
  1. data raw;
  2.         input code t;
  3. datalines;
  4. 1 -5
  5. 1 -4
  6. 1 -3
  7. 1 -2
  8. 1 -1
  9. 1 0
  10. 1 1
  11. 1 2
  12. 1 3
  13. 2 -5
  14. 2 -4
  15. 2 -3
  16. 2 2
  17. 2 3
  18. 2 4
  19. 3 -5
  20. 3 -4
  21. ;
  22. proc sort data=raw out=out;
  23.         by code t;
  24. run;
  25. data out;
  26.         set raw(where=(t ge 0));
  27.         by code;
  28.         if first.code then output;
  29. run;
复制代码
已有 1 人评分论坛币 收起 理由
peijiamei + 10 好程序!

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

7
rdzr 发表于 2010-7-30 10:38:47
lz, 请出功能强大的 sql,  貌似杀鸡用牛刀呀,下面 俺也来 凑个热闹,不用 sql 似乎也能 达到目的,程序如下:

data a;
input code t;
cards;
code t
1 -5
1 -4
1 -3
1 -2
1 -1
1 0
1 1
1 2
1 3
2 -5
2 -4
2 -3
2 2
2 3
2 4
;
data  b;
set a;
if t<0 then delete;
proc means data= b min;
var t;
class code;
run;

以下是运行结果,不知是否为 LZ所需:

                                         The SAS System           09:49 Friday, July 30, 2010  14
                                       The MEANS Procedure
                                      Analysis Variable : t
                                                 N
                                       code    Obs         Minimum
                               -----------------------------------
                                          1      4               0
                                          2      3       2.0000000
                               -----------------------------------
已有 1 人评分论坛币 收起 理由
peijiamei + 10 好程序!

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

8
bobguy 发表于 2010-8-2 08:42:50
rdzr 发表于 2010-7-30 10:38
lz, 请出功能强大的 sql,  貌似杀鸡用牛刀呀,下面 俺也来 凑个热闹,不用 sql 似乎也能 达到目的,程序如下:

data a;
input code t;
cards;
code t
1 -5
1 -4
1 -3
1 -2
1 -1
1 0
1 1
1 2
1 3
2 -5
2 -4
2 -3
2 2
2 3
2 4
;
data  b;
set a;
if t
The program can be simplified as,
data a;
input code t;
cards;
code t
1 -5
1 -4
1 -3
1 -2
1 -1
1 0
1 1
1 2
1 3
2 -5
2 -4
2 -3
2 2
2 3
2 4
;
/*data  b;*/
/*set a;*/
/*if t<0 then delete;*/
proc means data= a min;
class code;
var t;
output out=b min=;
where  t>=0;
run;
已有 1 人评分学术水平 热心指数 收起 理由
BraveMadMan + 1 + 1 对论坛有贡献

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

9
rdzr 发表于 2010-8-4 10:41:36
8# bobguy

学习了,编程效率确有提高,谢谢!

10
zhentao 发表于 2010-8-4 12:06:28
今天的悬赏怎么降下来了?

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 00:46