SAS中文论坛

标题: 求助:如何优化这个问题中的if-then 语句 [打印本页]

作者: shiyiming    时间: 2004-3-25 17: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;
作者: shiyiming    时间: 2004-3-25 17:10
试试select/case语句,在HELP中可以查到用法的。

其实也差不太多少 <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
作者: shiyiming    时间: 2004-3-25 17:13
:)
斑竹动作真快呀

有没有example放上来?
作者: shiyiming    时间: 2004-3-26 08:51
标题: 假如只要提取区号,试试下面办法。不需要考虑电话号码位数的。
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;
作者: shiyiming    时间: 2004-3-26 13:10
[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比较实用,:)
作者: shiyiming    时间: 2004-3-26 13:19
标题: 多谢edle夸奖~~~汗ing~~~
多谢edle夸奖~~~汗ing~~~
实不相瞒,小女子不过刚入门,为了赚点数才斗胆发贴哎。真实水平是臭之又臭的....




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2