前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAS汉字转拼音解决方案

SAS汉字转拼音解决方案

作者头像
专业余码农
发布2020-07-16 10:09:19
1.5K0
发布2020-07-16 10:09:19
举报
文章被收录于专栏:老Z的博客

在数据处理的工作中,可能会碰到要把汉字转换为对应拼音的问题,如将大量的中文姓名或名称转换成对应的拼音。之前写过一个简单的SAS程序来实现此目的,其主要步骤为:首先要用到汉字拼音对照表,然后将汉字设为宏变量,解析的值为其对应的拼音,接着将处理变量中的每个汉字前插入一个宏解析符号“&”,最后用RESOLVE函数在DATA步执行时解析得到对应的拼音,代码(SAS 9.2 for Windows)如下:

代码语言:javascript
复制
/*导入汉字拼音对照表*/                                                                  
proc import datafile="D:\Demo\GB2312汉字拼音对照表(6727字).txt"                       
    out=Hanzi_Pinyin(rename=(VAR1=HANZI VAR2=PINYIN))                                  
    dbms=dlm                                                                           
    replace;                                                                           
    guessingrows=1419;                                                                 
    delimiter=' ';                                                                     
    getnames=no;                                                                       
run;          
                                                                         
/*创建汉字宏变量*/                                                                      
data _null_;                                                                           
    set Hanzi_Pinyin;                                                                  
    call symputx(HANZI, PINYIN);                                                       
run;         
                                                                          
/*汉字列表*/                                                                           
proc sql noprint;                                                                      
    select distinct HANZI into :Hanzilst separated by "|"                              
        from Hanzi_Pinyin                                                              
    ;                                                                                  
quit;                                                                                  
                                                                 
/*防止Log有字符串比262个字符长的警告*/                                                   
options noquotelenmax;                                                                 

/*例子*/
data demo;                                                                             
    length HANZI $200.;                                                                
    HANZI='生活就像一台老虎机,你永远不会知道会蹦出什么来';                                
run;                                                                                   
                                                 
data want;                                                                             
    set demo;                                                                          
    PINYIN=resolve(prxchange("s/(&Hanzilst)/ &\1./", -1, HANZI));
    PINYIN=prxchange('s/(,| |-|_)\s/\1/', -1, cats(PINYIN));                      
run;

结果如下:

Result
Result

这个方法的优点是简洁且不用考虑分隔符,缺点是暂时不能解决汉字多音字拼音的问题。此方法还可以巧妙地用在很多地方。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档