SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1088|回复: 5
打印 上一主题 下一主题

求助:如何优化这个问题中的if-then 语句

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2004-3-25 17:08:08 | 只看该作者

求助:如何优化这个问题中的if-then 语句

打算从一个包含区号的电话号码中读取区号生成一个新的变量area,但由于具有2位区号的城市共有11个(10-北京,20、21-29依次对应广州、上海以及西安),这9个城市的电话号码均为8位,总共为10位。
与此同时,其他城市的区号都为3位,本地电话大部分为7位,少数城市为8位,所以加起来为10位或11位。

所以想请教下面一段程序中的if-then语句该如何优化,使程序比较简洁?
多谢!
----------------------------------
举例数据及程序如下:

data sample;
input date $ number $14.;
cards;
20031101    75582368888
20031101    2082368887
20031102    2182368886
20031102    5236237888
;
run;

data temp;
    set sample;
       numlength= length(number);
       if numlength = 10 then
         do;
           if substr(number,1,2)='20' then   /*本例中只有2个这类城市,如果10个都包含的话,这一段程序会比较复杂*/
            do;
                area='Guangzhou';
             end;
            else if substr(number,1,2)='21' then
                   do;
                      area='Shanghai';
            end;
        else do;
              area= substr(number,1,3);
             end;
           end;
      if numlength = 11 then area= substr(number,1,3);
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2004-3-25 17:10:04 | 只看该作者
试试select/case语句,在HELP中可以查到用法的。

其实也差不太多少 <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2004-3-25 17:13:23 | 只看该作者
:)
斑竹动作真快呀

有没有example放上来?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2004-3-26 08:51:32 | 只看该作者

假如只要提取区号,试试下面办法。不需要考虑电话号码位数的。

data temp;
set sample;
if substr(number,1,2) in ('10','20','21','22','23',
     '24','25','26','27','28','29') then area= substr(number,1,2);
else area= substr(number,1,3);
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2004-3-26 13:10:14 | 只看该作者
[quote=&quot;shiyiming&quot;:b316d]试试select/case语句,在HELP中可以查到用法的。

其实也差不太多少 <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->[/quote:b316d]


我看了一下,select case在VBA中相关用法比较好使,但在sas中感觉不是那么理想

个人觉得小猪的code比较实用,:)
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2004-3-26 13:19:45 | 只看该作者

多谢edle夸奖~~~汗ing~~~

多谢edle夸奖~~~汗ing~~~
实不相瞒,小女子不过刚入门,为了赚点数才斗胆发贴哎。真实水平是臭之又臭的....
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-1-8 15:54 , Processed in 0.108134 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表