SAS中文论坛

标题: 怎样从中文姓名提取首字母 [打印本页]

作者: shiyiming    时间: 2009-12-28 20:13
标题: 怎样从中文姓名提取首字母
我想要提取姓名的首字母。比如:
“张三”要变成“zs”。各位大侠。
这个在sas中有没有办法实现?
感谢shiyiming 与vicky1020 的帮助。我还想问一下如果按照vicky1020 的方法则需知道分别以二十六个字母开头的第一个汉字是什么。而有人说vicky1020 的标准汉字选择有错误,那该选择那些汉字作为标准汉字?还有电脑内部汉字编码存储排序的方式是什么?
是国标还是Unicode?shiyiming给出的标准汉字的编码显示是四位十六进制,但究竟是什么编码?各个数代表的是哪个汉字。我十分的不解。
再有各个好心的牛人给出的都是取首字母的方法。怎样取拼音呢?且每个字拼音之间用-连接。
再次感谢各位大牛的热心帮助。再次拜托了
作者: shiyiming    时间: 2009-12-30 16:18
标题: Re: 怎样从中文姓名提取首字母
个人倾向于用24个标准汉字作为cut off来计算拼音字母。伪代码如下。
[code:21kwevdz]if (i < 0xB0C5) return "a";
if (i < 0xB2C1) return "b";
if (i < 0xB4EE) return "c";
if (i < 0xB6EA) return "d";
if (i < 0xB7A2) return "e";
if (i < 0xB8C1) return "f";
if (i < 0xB9FE) return "g";
if (i < 0xBBF7) return "h";
if (i < 0xBFA6) return "j";
if (i < 0xC0AC) return "k";
if (i < 0xC2E8) return "l";
if (i < 0xC4C3) return "m";
if (i < 0xC5B6) return "n";
if (i < 0xC5BE) return "o";
if (i < 0xC6DA) return "p";
if (i < 0xC8BB) return "q";
if (i < 0xC8F6) return "r";
if (i < 0xCBFA) return "s";
if (i < 0xCDDA) return "t";
if (i < 0xCEF4) return "w";
if (i < 0xD1B9) return "x";
if (i < 0xD4D1) return "y";
if (i < 0xD7FA) return "z";[/code:21kwevdz]
作者: shiyiming    时间: 2010-1-5 15:43
标题: Re: 怎样从中文姓名提取首字母
Could be more detail? thanks!
作者: Qiong    时间: 2010-1-8 17:21
标题: Re: 怎样从中文姓名提取首字母
依照大牛的逻辑:
[code:3awm9j67]
data  chin ;        
     input name $20. ;   
   cards;
        阿三
        欧阳仔仔
    小明
;
run;

%macro a();
                  shouxie='a';
          if zi>='八 ' then shouxie='b ';
          if zi>='才 ' then shouxie='c ';
          if zi>='大 ' then shouxie='d ';
          if zi>='额 ' then shouxie='e ';
          if zi>='发 ' then shouxie='f ';
          if zi>='嘎 ' then shouxie='g ';
          if zi>='哈 ' then shouxie='h ';
          if zi>='及 ' then shouxie='j ';
          if zi>='卡 ' then shouxie='k ';
          if zi>='拉 ' then shouxie='l ';
          if zi>='马 ' then shouxie='m ';
          if zi>='那 ' then shouxie='n ';
          if zi>='哦 ' then shouxie='o ';
          if zi>='怕 ' then shouxie='p ';
          if zi>='其 ' then shouxie='q ';
          if zi>='热 ' then shouxie='r ';
          if zi>='萨 ' then shouxie='s ';
          if zi>='他 ' then shouxie='t ';
          if zi>='哇 ' then shouxie='w ';
          if zi>='西 ' then shouxie='x ';
          if zi>='呀 ' then shouxie='y ';
          if zi>='咋 ' then shouxie='z ';                  
eng=compress(eng||shouxie);
i=i+2;
%mend a;

data eng;
set chin;
length eng $4;
eng="";
i=1;
zi=substr(name,i,2);
do while(compress(zi)~="");
%a;
zi=substr(name,i,2);
end;
keep name eng;
run;
[/code:3awm9j67]
作者: shiyiming    时间: 2010-1-11 12:31
标题: Re: 怎样从中文姓名提取首字母
who是“大牛”?不要告诉我暗指我哦。我可绝对不是。我只是维护论坛运行的技术工罢了。 <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->
作者: Qiong    时间: 2010-1-12 13:53
标题: Re: 怎样从中文姓名提取首字母
idea是王道~~
程序有错误,应该用一声的字做标准字,否则会出错~~~
懒得改了。。。
作者: shiyiming    时间: 2010-1-17 15:06
标题: Re: 怎样从中文姓名提取首字母
多音字,也是个麻烦的事情。
作者: shiyiming    时间: 2010-1-17 23:23
标题: Re: 怎样从中文姓名提取首字母
多音字?对哦,没想到过。的确很麻烦。
这让我想起在日本的做过的一个项目。客户非要要求按照和历编年来制作报表和储存数据,即昭和XX年,平成XX年。TNND,为了这个还得专门搞个lookup table。
作者: shiyiming    时间: 2010-1-20 19:12
标题: Re: 怎样从中文姓名提取首字母
那再问一下各位大侠如果是取汉字的拼音该怎么办呢。如张三要返回“zhang san”
作者: shiyiming    时间: 2010-1-20 19:20
标题: Re: 怎样从中文姓名提取首字母
十分感谢各位大侠的帮助。特别是shiyiming 与vicky1020 。太牛了
作者: shiyiming    时间: 2010-1-21 13:23
标题: Re: 怎样从中文姓名提取首字母
这个需求就不要死抱SAS不放了,利用现成的资源和SAS Integration Technology解决就好了。
大致步骤如下:
1、在网上搜满足该需求的Java程序,当然C++和VB也行。随便搜艘,真是一大把现成的程序。 <!-- m --><a class="postlink" href="http://h2626819.javaeye.com/blog/223954">http://h2626819.javaeye.com/blog/223954</a><!-- m -->
2、安装JDK,将Java程序编译好。
3、用SAS直接调用Java Class返回你要的结果:“张三”-&gt;“zhangsan” <!-- m --><a class="postlink" href="http://www.devenezia.com/papers/sugi-30/241-30%20%28JavaObj%29.pdf">http://www.devenezia.com/papers/sugi-30 ... Obj%29.pdf</a><!-- m -->

其实原理是一抹一样,只不过你这个需求需要的标准汉字更多。
作者: shiyiming    时间: 2010-1-23 19:58
标题: Re: 怎样从中文姓名提取首字母
太牛了 太让人佩服了




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