楼主: madkoala
2611 6

[问答] 求教关于数据集拆分或条件求值 [推广有奖]

  • 0关注
  • 1粉丝

大专生

96%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
0
学术水平
3 点
热心指数
0 点
信用等级
0 点
经验
899 点
帖子
56
精华
0
在线时间
72 小时
注册时间
2009-4-7
最后登录
2018-12-28

楼主
madkoala 发表于 2011-11-18 20:27:16 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
一个sas数据集如下:
a  b
1  2
0  6
0  6
1  5  
0  1
1  6
...

该数据集是某软件导出的多个研究的sas数据集(现无法将多个研究分开导出)。其中a变量的观测作为一种标识,每当A=1,一直到出现在下一个1上面那行的0为止,这若干行就是一个独立的研究数据集,0出现的次数不定,可能只有1行,也可能有二十多行。目的很简单,用retain和max语句求这独立的研究中(从A=1那行开始到下一次A=1出现的上一行)b变量的最大值。

关键在于这个汇集多个研究的数据集不能sort不能by,否则数据全乱了。这样我就无法用if first之类的语句,除此之外在下实在想不出有什么办法来达到求每个研究最大值的效果。或者拆分表格?或直接在原表上进行操作?
二维码

扫码加我 拉你入群

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

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

关键词:数据集 sas数据集 RETAIN First 研究数据 最大值 软件

沙发
webgu 发表于 2011-11-18 21:20:04
  1. data tmp;
  2.   set have;
  3.   if a=1 then cat+1;
  4. run;

  5. proc sql;
  6.   create table want as
  7.   select cat , max(b)
  8.   from tmp
  9.   group by cat;  
  10. quit;
复制代码
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

藤椅
madkoala 发表于 2011-11-18 21:48:23
多谢楼上的网友, 通过新建一个变量来达成分类的效果!!对于初学者的我来说,这个思路一定对很多以后遇到的问题有很大的启发。

板凳
ordinaryxing 发表于 2011-11-19 04:02:02
学习了

报纸
suzhzh 发表于 2011-11-21 22:18:36
对的,通过一个新的变量可以很方便的处理很多事情,尤其是在做report的过程中经常会用到数据集的合并,排序等问题。

地板
456852 发表于 2011-11-22 01:54:19
楼主,你这个问题是可以用set by的。

data c;
input a  b;
cards;
1  2
0  10
0  6
1  5
0  1
1  6
0  4
0  2
0  6
0  77
0  5
;
data d;
set c;
by a notsorted;
retain c 0;
if a=1 and first.a=1 then c=b;
c=max(c,b);
if a=0 and last.a=1;
run;

7
shiyishibasui 发表于 2014-6-10 17:01:06
456852 发表于 2011-11-22 01:54
楼主,你这个问题是可以用set by的。

data c;
没看懂这里面的最后一行

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

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