专栏首页老Z的博客SAS汉字转拼音解决方案

SAS汉字转拼音解决方案

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

/*导入汉字拼音对照表*/                                                                  
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;

结果如下:

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SAS自定义函数获取某逻辑库下所有表名

    今天看到一个群友提的一个问题:SAS有无一个函数将某LIBNAME下表名都取出?这个问题用字典数据表或者视图(DICTIONARY Tables and SAS...

    专业余码农
  • SAS删除字符串中的重复项

    SAS程序猿/媛有时候会碰到去除字符串中重复值的问题,用常用的字符函数如SCAN,SUBSTR可能会很费劲,用正则表达式来处理就简单了。示例程序如下:

    专业余码农
  • SAS自动打开数据集及复制变量值

    上个月的今天,我从南到北,从深圳奔赴帝都参加了一个制药行业软件用户组2016中国区年会(PharmaSUG China 2016)。听了两天的报告,收获不少。有...

    专业余码农
  • 计算机高频知识点详解

    重磅!福建农信社招863人,大专/往届均可报考! 福建农信社报考须知:我是笔试类还是免笔试类? 紧急通知 | 农信社笔试内容大变动 01 计算机中的信息表示 1...

    企鹅号小编
  • 爬取猫眼电影TOP100

    本项目基本目标:在猫眼电影中把top100的电影名,排名,海报,主演,上映时间,评分等爬取下来

    py3study
  • miniRedux实现与源码解读

    念念不忘
  • linux ssh更换默认的22端口

    架构师专栏
  • 手把手使用SonarQube分析、改善项目代码质量

    SonarQube是一个开源的代码质量管理系统,可用来快速定位代码中的Bug、漏洞以及不优雅的代码。它支持几乎所有的常见编程语言,例如Java、JavaScri...

    用户4172423
  • 剑指Offer系列刷题笔记汇总

    版权声明:本文为博主原创文章,未经博主允许不得转载。个人网站:http://cuijiahua.com。 ...

    Jack_Cui
  • HR问,你目前有几个offer?如何作答比较合适?

    小K离开了原来的公司,在重新寻找工作机会,面试时,小K发现,很多公司的HR小姐姐,都会向他打听自己手里的Offer数。

    一个优秀的废人

扫码关注云+社区

领取腾讯云代金券