楼主: liu022
2549 17

用SQL寻找符合要求的记录 [推广有奖]

11
liu022 发表于 2011-9-16 20:18:56
yumenderen 发表于 2011-9-10 23:27
proc sql;
create table b as
select *
我的意思是比如按照变量Var3分类,选出每一类符合要求(例如每一类中Var2最小)的记录~谢谢!

12
chai_prime 发表于 2011-9-17 02:16:18
加一句
group by  var3;

13
liu022 发表于 2011-9-17 23:02:57
chai_prime 发表于 2011-9-17 02:16
加一句
group by  var3;
很奇怪的是我这么写SAS是报错的~所以就很郁闷~

14
chai_prime 发表于 2011-9-17 23:23:04
liu022 发表于 2011-9-17 23:02
很奇怪的是我这么写SAS是报错的~所以就很郁闷~
你看看分号...把group 前的分号去了~~

quit前有个分号就ok了..

15
liu022 发表于 2011-9-18 21:38:52
chai_prime 发表于 2011-9-17 23:23
你看看分号...把group 前的分号去了~~

quit前有个分号就ok了..
您好!
我的代码如下:
proc sql;
create table b as
select *
from data
where std =(select distinct min(std) from data where lambda ne 0)
group by id;
;
quit;
这么做只选出了所有样本中std最小的记录,而不是按照id选出的每一类std最小的记录

日志出现警告,如下:


3    proc sql;
4    create table b as
5    select *
6    from data.Ind_improved_fdr
7    where std =(select distinct min(std) from data.Ind_improved_fdr where lambda ne 0)
8    group by id;
WARNING: GROUP BY 子句已变换为 ORDER BY 子句,因为 SELECT 子句和相关表的表达式的可选 HAVING 子句都没有引用汇总函数。
NOTE: 表 WORK.B 创建完成,有 1 行,6 列。

9    ;
10   quit;
NOTE: “PROCEDURE SQL”所用时间(总处理时间):
      实际时间          0.41 秒
      CPU 时间          0.06 秒


请指点迷津,谢谢!

16
chai_prime 发表于 2011-9-18 22:43:57
liu022 发表于 2011-9-18 21:38
您好!
我的代码如下:
proc sql;
  1. proc sql;
  2. create table b as
  3.         select * from have
  4.         where x^ = 0  group by z having y = min(y) ;
  5. quit;
复制代码
这样可以了~~那个子查询得到的结果是多个最小值,误导...

17
chai_prime 发表于 2011-9-18 22:45:32
chai_prime 发表于 2011-9-18 22:43
这样可以了~~那个子查询得到的结果是多个最小值,误导...
  1. data have;
  2.         x = 1; y = 2; z = 3;
  3.         output;
  4.         x = 0; y = 1; z = 3;
  5.         output;
  6.         x = 3; y = 2; z = 2;
  7.         output;
  8.         x = 2; y = 1; z = 2;
  9.         output;
  10.         x = 3; y = 2; z = 1;
  11.         output;
  12.         x = 2; y = 1; z = 0;
  13.         output;
  14. run;

  15. proc sql;
  16. create table b as
  17.         select * from have
  18.         where x^ = 0  group by z having y = min(y) ;
  19. quit;
复制代码
把全部的都贴上吧...哎,我也刚会,小试了一会~~

你试下,结果应该是你想要的了~~如果我没理解错的话...

18
456852 发表于 2011-9-20 01:20:28
我糊涂了:
data a;
input c $ a d;
cards;
a 2 0
a 4 1
a 6 1
b 3 0
b 5 1
c 6 1
c 9 1
c 10 1
d 5 0
;
proc sql;
create table b as
select distinct c,min(a) as a from a
where d^=0
group by c
;
quit;
这样不就行了?

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

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