楼主: webgu
3214 9

[原创博文] 变量分组的几种常用方法 [推广有奖]

贵宾

学科带头人

95%

还不是VIP/贵宾

-

TA的文库  其他...

Python与统计

SAS与统计

威望
2
论坛币
102549 个
通用积分
3.4687
学术水平
475 点
热心指数
493 点
信用等级
434 点
经验
62369 点
帖子
1555
精华
4
在线时间
2201 小时
注册时间
2009-5-4
最后登录
2025-12-25

初级学术勋章 初级热心勋章 初级信用勋章 中级学术勋章 中级热心勋章 中级信用勋章

楼主
webgu 发表于 2012-5-24 14:16:28 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

给变量分组,常用的方法有:

1、if-else then ;

2、select-when ;

3.proc format.

下面以sashelp.class 为例,对不同age的同学分组。


注意 select when 的方法,很容易弄混。


http://blog.sina.com.cn/s/blog_41889b9001015htv.html


/***1. if -else then****/

data class;

  set sashelp.class;

     if age<12 then agegroup="A";

else if age<14 then agegroup="B";

else agegroup="C";

run;


/***2. select when***/

data class;

  set sashelp.class;

  select;

      when(age<12) agegroup="A";

      when(age<14) agegroup="B"; /*据jingju 的提醒,不必写成12〈=age<14)*/

     other agegroup="C";

  end;

run;


proc sql ;

  create table class as

  select  *,case when(age<12)  then"A"

                 when(age<14) then "B"

                 else "C"

  end asagegroup

  from sashelp.class;

quit;



/***3. proc fomat ***/

proc format;

   value agefmt low-<12="A"

                12-<14="B"

                14-hight="C"

                ;

run;

data class;

   set sashelp.class;

agegroup=put(age,agefmt.);

run;

二维码

扫码加我 拉你入群

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

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

关键词:变量分组 SASHELP Select format Elect

沙发
webgu 发表于 2012-5-28 09:54:55
从效率上讲,哪种更高效?
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

藤椅
ryuuzt 发表于 2012-6-1 09:28:44
webgu 发表于 2012-5-28 09:54
从效率上讲,哪种更高效?
第三种最快。
呵呵,不是我判断的,是我都跑了一遍。
谢谢。

板凳
litaoting 发表于 2012-6-1 14:14:36
一直对sql不是很了解,有空能仔细讲讲么?

报纸
webgu 发表于 2012-6-1 15:58:11
litaoting 发表于 2012-6-1 14:14
一直对sql不是很了解,有空能仔细讲讲么?
呵呵,这个话题有些大,可以说个具体某方面的,我整理整理。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

地板
tj0412ymy 发表于 2012-6-1 16:22:46
Good Summary!
另外,同样的操作,一般情况下DATA步效率要比SQL步更高;该例中Proc Format效率最高是很显然的,无论是Select When还是 If then都需要在读取每一条观测后做条件判断,而Proc Format省去了条件判断的步骤,因为对每一值都事先做好了Label。
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

7
tj0412ymy 发表于 2012-6-1 16:56:32
如果只是为了生成交叉表,利用Proc format有更大的优势,都无需生成目标变量。For example:
  1. proc format;
  2.    value agefmt low-<12="A"
  3.                 12-<14="B"
  4.                 14-hight="C"
  5.                 ;
  6. run;

  7. proc freq data=sashelp.class;
  8. tables age*sex;
  9. format age agefmt.;
  10. run;
复制代码
对SAS和统计方面感兴趣的朋友,请加SAS学习和认证讨论群:169157207。欢迎在群上讨论!

8
webgu 发表于 2012-6-1 17:18:31
tj0412ymy 发表于 2012-6-1 16:56
如果只是为了生成交叉表,利用Proc format有更大的优势,都无需生成目标变量。For example:
嗯,这个是format的较常规的应用 。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

9
webgu 发表于 2012-6-1 17:23:18
tj0412ymy 发表于 2012-6-1 16:22
Good Summary!
另外,同样的操作,一般情况下DATA步效率要比SQL步更高;该例中Proc Format效率最高是很显然 ...
其实细细来讲,FORMAT并非不需要做判断,只是在用PUT function里用了BINARY SEARCH 搜索value,找到对应的LABEL.
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

10
yongjiang2 发表于 2012-6-28 11:03:33
学习1111111111111

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 11:44