楼主: LonelyのFiFi
7909 11

sas 最大值问题 [推广有奖]

  • 0关注
  • 0粉丝

初中生

76%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
107 点
帖子
10
精华
0
在线时间
27 小时
注册时间
2012-7-17
最后登录
2013-4-9

楼主
LonelyのFiFi 发表于 2012-7-17 22:30:26 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位大神们,小弟初学sas。现在碰到一个问题。两个班级,先分类,再分别在value中求出最大值,然后加一列变量flag,在最大的数据行标上yes,重复数据取第一个数据。
data a;
input class value;
datalines;
1 1.4
1 1.6
1 1.5
2 1.1
2 1.2
2 1.2
;
run;

结果就是
class value flag
1 1.4 .
1 1.6 yes
1 1.5 .
2 1.1 .
2 1.2 yes
2 1.2 .






二维码

扫码加我 拉你入群

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

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

关键词:最大值 value 初学sas Lines Input SAS 最大值

QQ截图20120717221938.jpg (6.92 KB)

QQ截图20120717221938.jpg

回帖推荐

YueweiLiu 发表于2楼  查看完整内容

本帖被以下文库推荐

沙发
YueweiLiu 发表于 2012-7-17 23:05:07
  1. data want;
  2.         sum=0;
  3.         maxflag=0;
  4.         do until (last.class);
  5.                 set a;
  6.                 by class;
  7.                 max=max(max,value);
  8.         end;
  9.         do until (last.class);
  10.                 set a;
  11.                 by class;
  12.                 if maxflag=0 and value=max then do;
  13.                         flag="YES";
  14.                         maxflag=1;
  15.                 end;
  16.                 output;
  17.                 flag="";
  18.         end;
  19.         drop sum maxflag max;
  20. run;
复制代码
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

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

藤椅
LonelyのFiFi 发表于 2012-7-17 23:14:28
YueweiLiu 发表于 2012-7-17 23:05
谢谢!!!那么快就有答案了!!!万分感谢!!!

板凳
LonelyのFiFi 发表于 2012-7-17 23:23:49
YueweiLiu 发表于 2012-7-17 23:05
万分感谢!!

报纸
chendonghui1987 发表于 2012-7-18 09:39:40
data a;
input class value;
datalines;
1 1.4
1 1.6
1 1.5
2 1.1
2 1.2
2 1.2
;
run;

proc sort data = work.a;
        by class value;
run;

data work.b;
        set work.a;
        by class value;
        if last.class then flag = 'yes';
        else flag = '.';
run;

地板
LonelyのFiFi 发表于 2012-7-18 10:49:53
chendonghui1987 发表于 2012-7-18 09:39
data a;
input class value;
datalines;
太谢谢了!!

7
jasonscut 在职认证  发表于 2012-7-18 11:09:41

个人偏向于sql 去弄,更直接.
北美统计金融博士

8
LonelyのFiFi 发表于 2012-7-18 11:49:30
jasonscut 发表于 2012-7-18 11:09
个人偏向于sql 去弄,更直接.
我也试过sql,可是水平不够。。求大神指导~

9
YueweiLiu 发表于 2012-7-18 17:56:23
他的问题里有两个细节:1. 没有按value排序;2. 重复数据取第一个数据

10
YueweiLiu 发表于 2012-7-18 18:04:39
jasonscut 发表于 2012-7-18 11:09
个人偏向于sql 去弄,更直接.
为什么sql更直接噢?我倒是觉得有时候用sql反倒会更麻烦。
  1. proc sql;
  2.         create table want(drop=n) as
  3.         select *,monotonic() as n,case when value=max(value) then "YES" else "" end as flag length=8 from a group by class order by n;
  4. quit;
复制代码
这样的话,可以找到找到最大值,并赋值“YES”,但是不能处理重复值的问题。起码我是想不到用sql来觉得这个问题的方法:)

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

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