楼主: moonstone
2220 1

[SAS] SAS中输出某一变量特征值的几种简单方法比较 [推广有奖]

已卖:1871份资源

讲师

74%

还不是VIP/贵宾

-

威望
0
论坛币
10497 个
通用积分
369.1083
学术水平
160 点
热心指数
169 点
信用等级
124 点
经验
274256 点
帖子
237
精华
1
在线时间
520 小时
注册时间
2007-4-27
最后登录
2024-12-6

楼主
moonstone 发表于 2015-3-7 19:43:04 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
运用SAS输出某一变量某一特征值(比如最小值,最大值,均值等等)的方法有多种,不同方法之间有细微的差别。现以最小值为例,简单举例比较几种常用方法的区别:

  1. data balances;
  2.   input custid $ bal1 bal2 bal3 bal4 bal5 bal6;
  3.   datalines;
  4. 12345  911.00  863.30  896.98 1672.26 1675.20  602.42
  5. 12346   62.27   10.28 1377.79 1683.42 1290.92  553.13
  6. 12347 1996.54   74.68  253.94  374.02  691.90  593.75
  7. 12348 1494.83 1114.74  332.76  505.95     .    963.98
  8. 12349  336.61  295.78  335.5  1965.40  592.76  664.7
  9. ;
  10. run;

  11. /*(1)采用data步中的min或smallest是以某一条观测为基础,寻找该观测的不同变量间取值最小的那个,而不是找某一个变量在所有观测中的最小值*/
  12. data balances2;
  13.    set balances;
  14.    minbal=min(of bal1-bal6); /*获取每个观测bal1-bal6中的最小值*/
  15.    large1=smallest(2,of bal1-bal6);  /*获取每个观测bal1-bal6中的第二个最小值*/
  16.    large2=smallest(3,of bal1-bal6);  /*获取每个观测bal1-bal6中的第三个最大值*/
  17.    put maxbal large1 large2;
  18. run;

  19. /*但是使用proc transpose转置一下,再用相同函数可以得到每个变量的最小值,不过这种办法有点曲线救国了*/

  20. proc transpose data=balances out=trans name=Test prefix=sn;
  21.    id custid;
  22. run;

  23. data balances3;
  24.    set trans;
  25.    minbal=min(of sn12345-sn12349); /*获取变量bal1-bal6中的最小值*/
  26.    put minbal;
  27. run;

  28. /*(2)采用SQL寻找某一个变量在所有观测中的最小值应该是最高效的方法*/
  29. proc sql;
  30. create table min1 as
  31. select min(bal1) as min_bal1
  32. from balances
  33. ;
  34. quit;

  35. proc print data=min1; var min_bal1; run;

  36. /*采用SQL在处理该问题的明显优势在于:可以同时定位该变量最小值所在的记录,这在数据清理中查询“异常值”非常有帮助*/

  37. proc sql;
  38. create table min1 as
  39. select custid, bal1
  40. from balances
  41. having bal1 = min(bal1)
  42. ;
  43. quit;

  44. proc print data=min1; run;

  45. /*(3)采用proc summary, proc univariate 也是另外一种寻找某一个变量最小值的可选的办法*/
  46. proc summary data=balances;
  47. var bal1;
  48. output out=sum1 min=min_bal1;
  49. run;

  50. proc print data=sum1;run;

  51. proc univariate data=balances;
  52. var bal1;
  53. output out=sum1 min=min_bal1;
  54. run;

  55. proc print data=sum1;run;

  56. /*proc univariate 同时还有另外一个特别的选项,nextrods, 可以同时输出多个最大最小的观测值,并输出相应的ID号,这对数据清理中发现异常值非常重要*/
  57. proc univariate data=balances nextrods=3;
  58. id custid;
  59. var bal1;
  60. run;


  61. /*(4)采用proc tabulate 也是另外一种备选的办法*/
  62. proc tabulate data=balances;
  63. var bal1;
  64. table bal1*(mean std min max median);
  65. keylabel mean='均值' std='标准差' min='最小值' max='最大值' median='中位数';
  66. run;

  67. /*(5)如果熟悉矩阵的话,当然也是可以采用的*/
复制代码


二维码

扫码加我 拉你入群

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

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

关键词:变量特征值 简单方法 特征值 Univariate Transpose 简单方法 变量特征值 SAS

已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
xddlovejiao1314 + 100 + 100 + 5 + 5 + 5 精彩帖子
niuniuyiwan + 60 + 60 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 160  论坛币 + 160  学术水平 + 10  热心指数 + 10  信用等级 + 10   查看全部评分

本帖被以下文库推荐

沙发
xddlovejiao1314 学生认证  发表于 2015-10-29 16:50:00
谢谢分享。
已有 1 人评分论坛币 收起 理由
niuniuyiwan + 10 精彩帖子

总评分: 论坛币 + 10   查看全部评分

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-29 08:30