- 阅读权限
- 255
- 威望
- 0 级
- 论坛币
- 10497 个
- 通用积分
- 369.1083
- 学术水平
- 160 点
- 热心指数
- 169 点
- 信用等级
- 124 点
- 经验
- 274256 点
- 帖子
- 237
- 精华
- 1
- 在线时间
- 520 小时
- 注册时间
- 2007-4-27
- 最后登录
- 2024-12-6
已卖:1871份资源
讲师
还不是VIP/贵宾
- 威望
- 0 级
- 论坛币
 - 10497 个
- 通用积分
- 369.1083
- 学术水平
- 160 点
- 热心指数
- 169 点
- 信用等级
- 124 点
- 经验
- 274256 点
- 帖子
- 237
- 精华
- 1
- 在线时间
- 520 小时
- 注册时间
- 2007-4-27
- 最后登录
- 2024-12-6
 | 开心 2019-5-7 20:19:59 |
|---|
签到天数: 527 天 连续签到: 1 天 [LV.9]以坛为家II
|
经管之家送您一份
应届毕业生专属福利!
求职就业群
感谢您参与论坛问题回答
经管之家送您两个论坛币!
+2 论坛币
运用SAS输出某一变量某一特征值(比如最小值,最大值,均值等等)的方法有多种,不同方法之间有细微的差别。现以最小值为例,简单举例比较几种常用方法的区别:
- data balances;
- input custid $ bal1 bal2 bal3 bal4 bal5 bal6;
- datalines;
- 12345 911.00 863.30 896.98 1672.26 1675.20 602.42
- 12346 62.27 10.28 1377.79 1683.42 1290.92 553.13
- 12347 1996.54 74.68 253.94 374.02 691.90 593.75
- 12348 1494.83 1114.74 332.76 505.95 . 963.98
- 12349 336.61 295.78 335.5 1965.40 592.76 664.7
- ;
- run;
- /*(1)采用data步中的min或smallest是以某一条观测为基础,寻找该观测的不同变量间取值最小的那个,而不是找某一个变量在所有观测中的最小值*/
- data balances2;
- set balances;
- minbal=min(of bal1-bal6); /*获取每个观测bal1-bal6中的最小值*/
- large1=smallest(2,of bal1-bal6); /*获取每个观测bal1-bal6中的第二个最小值*/
- large2=smallest(3,of bal1-bal6); /*获取每个观测bal1-bal6中的第三个最大值*/
- put maxbal large1 large2;
- run;
- /*但是使用proc transpose转置一下,再用相同函数可以得到每个变量的最小值,不过这种办法有点曲线救国了*/
- proc transpose data=balances out=trans name=Test prefix=sn;
- id custid;
- run;
- data balances3;
- set trans;
- minbal=min(of sn12345-sn12349); /*获取变量bal1-bal6中的最小值*/
- put minbal;
- run;
- /*(2)采用SQL寻找某一个变量在所有观测中的最小值应该是最高效的方法*/
- proc sql;
- create table min1 as
- select min(bal1) as min_bal1
- from balances
- ;
- quit;
- proc print data=min1; var min_bal1; run;
- /*采用SQL在处理该问题的明显优势在于:可以同时定位该变量最小值所在的记录,这在数据清理中查询“异常值”非常有帮助*/
- proc sql;
- create table min1 as
- select custid, bal1
- from balances
- having bal1 = min(bal1)
- ;
- quit;
- proc print data=min1; run;
- /*(3)采用proc summary, proc univariate 也是另外一种寻找某一个变量最小值的可选的办法*/
- proc summary data=balances;
- var bal1;
- output out=sum1 min=min_bal1;
- run;
- proc print data=sum1;run;
- proc univariate data=balances;
- var bal1;
- output out=sum1 min=min_bal1;
- run;
- proc print data=sum1;run;
- /*proc univariate 同时还有另外一个特别的选项,nextrods, 可以同时输出多个最大最小的观测值,并输出相应的ID号,这对数据清理中发现异常值非常重要*/
- proc univariate data=balances nextrods=3;
- id custid;
- var bal1;
- run;
- /*(4)采用proc tabulate 也是另外一种备选的办法*/
- proc tabulate data=balances;
- var bal1;
- table bal1*(mean std min max median);
- keylabel mean='均值' std='标准差' min='最小值' max='最大值' median='中位数';
- run;
- /*(5)如果熟悉矩阵的话,当然也是可以采用的*/
复制代码
扫码加我 拉你入群
请注明:姓名-公司-职位
以便审核进群资格,未注明则拒绝
|
|
-
总评分: 经验 + 160
论坛币 + 160
学术水平 + 10
热心指数 + 10
信用等级 + 10
查看全部评分
|