楼主: 棋子符号
5975 11

[问答] 求助:sas中怎么把对一组变量中的最大值赋予一个新变量做标记 [推广有奖]

  • 0关注
  • 0粉丝

初中生

80%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
340 点
帖子
14
精华
0
在线时间
15 小时
注册时间
2013-10-24
最后登录
2015-11-18

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
求帮助,有一组数据
                          pt       visit       value
                  1     1001    visit1        2                 
                  2     1001    visit1        3                 
                  3     1001    visit1        5                 
                  4     1003    visit2        1                 
                  5     1003    visit2        4        
我想输出成
                           pt       visit       value    flag
                  1     1001    visit1        2                 
                  2     1001    visit1        3                 
                  3     1001    visit1        5        yes         
                  4     1003    visit2        1                 
                  5     1003    visit2        4        yes

就是在每类visit中的最大值后面赋予一个flag=“yes”,其它的值flag为空白,这个程序应该怎么写?求帮助,谢谢各位!



二维码

扫码加我 拉你入群

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

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

关键词:新变量 最大值 Visit value visi 最大值

沙发
shirley923 发表于 2014-4-11 22:21:37 |只看作者 |坛友微信交流群
I will code below in data step:
if value >3 then flag ='yes' ; else flag= '  ';

good luck.

使用道具

藤椅
zhengbo8 发表于 2014-4-11 22:31:23 |只看作者 |坛友微信交流群
  1. data a;
  2.         input pt visit $ value;
  3. datalines;
  4. 1001    visit1        2                 
  5. 1001    visit1        3                 
  6. 1001    visit1        5                 
  7. 1003    visit2        1                 
  8. 1003    visit2        4      
  9. ;

  10. proc sql noprint;

  11.         create table result as
  12.                 select *,'yes' as flag from a group by pt having max(value)=value  
  13.                 union
  14.                 select *,'' as flag from a group by pt having max(value)<>value;

  15. quit;
复制代码

使用道具

板凳
棋子符号 发表于 2014-4-11 22:48:41 |只看作者 |坛友微信交流群
shirley923 发表于 2014-4-11 22:21
I will code below in data step:
if value >3 then flag ='yes' ; else flag= '  ';
thank you for your answer!I was casually write this group of data.the max of value >3 is a coincidence so i want to know if classified by value to define the max value,how should i do? such as:
pt visit  value  flag
1  visit1 3
1  visit1 5
1  visit1 7
1  visit1 9  yes
2  visit2 1
2  visit2 2
2  visit2 3  yes
if i want to creat a flag=yes stay with the max value by every visit .ask for help,thank you very much!

使用道具

报纸
棋子符号 发表于 2014-4-11 22:57:48 |只看作者 |坛友微信交流群
zhengbo8 发表于 2014-4-11 22:31
太谢谢了~能不能再请教您一个问题。还是这个数据 如果我想把这个数据输出成
pt       value1   value2   value3
1001     5          3          2
1003     4          1          .
就是把value的每个值按从大到小的顺序生成新的变量,请问您知道这个程序应该怎么写么?非常感谢!

使用道具

地板
zhengbo8 发表于 2014-4-11 23:00:25 |只看作者 |坛友微信交流群
棋子符号 发表于 2014-4-11 22:57
太谢谢了~能不能再请教您一个问题。还是这个数据 如果我想把这个数据输出成
pt       value1   value2   ...
稍等。

使用道具

7
棋子符号 发表于 2014-4-11 23:31:33 |只看作者 |坛友微信交流群
zhengbo8 发表于 2014-4-11 23:00
稍等。
好的~麻烦你了~谢谢!

使用道具

8
zhengbo8 发表于 2014-4-12 00:56:46 |只看作者 |坛友微信交流群
针对中小数据集,可以使用转置。

  1. data a;
  2.         input pt visit $ value;
  3. datalines;
  4. 1001    visit1        2                 
  5. 1001    visit1        3                 
  6. 1001    visit1        5                 
  7. 1003    visit2        1                 
  8. 1003    visit2        4      
  9. ;

  10. proc sql noprint;
  11.         create table a as select *  from a group by pt order by pt,value desc;
  12. quit;

  13. proc transpose data = a out = result(drop=_name_) prefix=value;
  14.         var value;
  15.         by pt;
  16. run;
复制代码

使用道具

9
farmman60 发表于 2014-4-12 08:49:13 |只看作者 |坛友微信交流群
  1. data a;
  2. input pt visit $ value;
  3. datalines;
  4. 1001    visit1        2                 
  5. 1001    visit1        3                 
  6. 1001    visit1        5                 
  7. 1003    visit2        1                 
  8. 1003    visit2        4      
  9. ;
  10. run;

  11. proc sql;
  12.   select *,ifc(value=max(value),'yes',' ') as flag from a group by pt order by pt,value asc;
  13.   quit;

  14. data want;
  15.   do i=1 by 1 until (last.pt);
  16.   set a(keep= pt value);
  17.   by pt;
  18.   array new value1-value3;
  19.   new(i)=value;
  20.   if last.pt then do;
  21.   call sortn(of value3-value1);
  22.    output;
  23.    end;
  24. end;
  25. drop i value;
  26. run;
复制代码

使用道具

10
棋子符号 发表于 2014-4-12 13:29:45 |只看作者 |坛友微信交流群
zhengbo8 发表于 2014-4-12 00:56
针对中小数据集,可以使用转置。
非常感谢~

使用道具

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

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

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

GMT+8, 2024-4-28 05:32