楼主: wangchan200604
2971 7

[求助]SAS中如何实现oracle的decode函数功能 [推广有奖]

  • 0关注
  • 0粉丝

本科生

2%

还不是VIP/贵宾

-

威望
0
论坛币
227 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
881 点
帖子
89
精华
0
在线时间
11 小时
注册时间
2006-4-3
最后登录
2014-8-6

楼主
wangchan200604 发表于 2009-4-10 08:30:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

求教:oracle的decode函数功能如何在SAS中实现?

比如一个变量score,取值0-100,现在想生成一个新变量sev,4个等级0-3

if         score=0    then sev=0;

if  1<=score=30   then sev=1;

if 31<=score=69  then sev=2;

if score>=70        then sev=3;

现在我想用一条语句解决这个问题,希望高手赐教!

二维码

扫码加我 拉你入群

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

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

关键词:Oracle decode Deco 如何实现 code 函数 SAS 功能 Oracle decode

沙发
hot101 发表于 2009-4-10 09:42:00
You can use "Proc Format" to handle this. It is very easy.

藤椅
wangchan200604 发表于 2009-4-10 09:45:00

在data步中该如何实现呢?

板凳
hot101 发表于 2009-4-10 10:04:00
Here is the example for you. Remember, once you have your format built, you can use it in any data step and proc step. Let me know if you need further hep.


Proc Format;
    Value salerange
         low - 0=0
          1-3000 =1
          3001-6999=2
          6999-high =3;

Data Shoes (keep=Region Sales Band);
    set sashelp.shoes;
    Format band 1.;
    band = input(Put(Sales, salerange.), 1.);
Run;

报纸
wangchan200604 发表于 2009-4-10 10:07:00

下面首先生成一个数据集trial,包括我的关心的score和sev;

然后我用sql中的case expression生成一个新变量sev2,跟sev一样;

但是现在我想在data步中达到这个目的

DATA  TRIAL;
INPUT TRT $ CENTER PAT SEX $ AGE SCORE @@;
RESP = (SCORE GT 0);
/* RESP=0 (symptoms are absent), =1 (symptoms are present) */
IF (SCORE = 0) THEN SEV = 0; /* 0 No Symptoms*/
IF ( 1 LE SCORE LE 30) THEN SEV = 1; /* 1 mild Symptoms*/
IF (31 LE SCORE LE 69) THEN SEV = 2; /* 2 moderate Symptoms*/
IF (SCORE GE 70) THEN SEV = 3; /* 3 severe Symptoms*/
DATALINES;
A 1 101 M 55 5  A 1 104 F 27 0  A 1 106 M 31 35
A 1 107 F 44 21 A 1 109 M 47 15 A 1 111 F 69 70
A 1 112 F 31 10 A 1 114 F 50 0  A 1 116 M 32 20
B 1 105 M 45 20 B 1 108 F 44 65 B 1 110 M 32 25
B 1 113 M 61 75 B 1 115 M 45 83 B 1 117 F 21 0
B 1 120 F 19 55 B 1 122 F 38 0  B 1 125 M 37 72
;
run;

proc sql outobs=12;
   create table a1 as
   select score, sev,
          case
             when score eq 0 then 0
             when 1 le score le 30 then 1
             when 31 le score le 69 then 2
             else 3
          end as sev2
      from trial;
quit;
    

地板
wangchan200604 发表于 2009-4-10 10:21:00
thank u,

7
hot101 发表于 2009-4-10 10:22:00
(sorry last example has an error, it should be 7000, instead of 6999 in band 3)

Your solution:


Proc Format;
    Value sevband
          low -0=0
          1-30 =1
          31-69=2
          70-high =3;


Data a1 (keep=score sev sev2);
    set trial;
   format sev2 1.;
   sev2 =input(put(score, sevband.), 1.);
run;

8
steve10 发表于 2009-4-10 10:54:00

Here you go:

sev=(((score>=1)&(score<=30))+2*((score>=31)&(score<=69))+3*(score>=70));

You asked the same question twice.

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

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