楼主: dahufa123
13672 8

怎样从中文姓名提取首字母 [推广有奖]

  • 0关注
  • 2粉丝

本科生

36%

还不是VIP/贵宾

-

威望
0
论坛币
35 个
通用积分
0.1405
学术水平
23 点
热心指数
25 点
信用等级
22 点
经验
3723 点
帖子
66
精华
0
在线时间
62 小时
注册时间
2009-3-16
最后登录
2024-4-8

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位大侠,我想从姓名中提取首字母,原因是我的两个数据库中有一个只有名字和id,而另一个只有首字母缩写和id。按id合并后再按姓名看一看,所以要从姓名中提取首字母进行比较。
如“张三”“李四”要转化成“ZS” 、"LS".
怎么整?求大侠帮忙
多谢各位热心人再做一点说明我不是要改某个字符而是数据库中一个字符型变量。其次这个原理我已经大概知道了就是找出某一字母开始的汉字中的第一个。比如a开头第一个是“啊”b开头第一个是“把”那么大于啊小于把的就都是以字母a开头的。但是怎样确定以某字母开头的第一个汉字。是直接进行汉字比较如"if '啊'<汉字<'把' then pinyin=a;"还是要找出sas系统存储汉字的编码。如果需找出编码那么怎么找。
还有上面的方法不能找汉字的拼音,如果要找出拼音该怎么办,如张三要返回“zhang-san”、王二麻子“wang-er-ma-zi”要怎么办?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:字符型变量 各位大侠 数据库 字符型 热心人 中文 姓名 字母

回帖推荐

gzjb 发表于5楼  查看完整内容

Abstracted it from other source. Hope it's useful for LZ. 如何提取汉语拼音的首字?一般来说,有两种方法!   ①函数法:利用vlookup,但有一定的局限性,效率也是问题。   ②vba法:是最佳的选择,并且,仅使用几行Excel VBA代码就行,为什么这么说呢?因为Excel里利用Vlookup工作表函数和Evaluate方法可以快捷的计算出结果。   通过如下例子可以看出Excel VBA独有的优势。代码如下   Public Function ...

zhangruyang 发表于6楼  查看完整内容

%MACRO CharToPY(CharName=);/*获得一个汉字的拼音第一个字母*/ OPTIONS SOURCE=0 NOTES=0; DATA _NULL_; TransToHex=put("&CharName",$HEX4.); CALL SYMPUT('HexCode',TransToHex); RUN; %LET Now=0x&HexCode; %GLOBAL Out; %IF ( &Now < 0xB0A1) %THEN %LET Out=&CharName; %ELSE %IF ( &Now < 0xB0C5) %THEN %LET Out=A; %ELSE %IF ( &Now < 0xB2C1) %THEN %LET Out=B; %ELSE %IF ( &Now < 0 ...

本帖被以下文库推荐

沙发
bobguy 发表于 2009-12-29 00:59:01 |只看作者 |坛友微信交流群
1# dahufa123

It can be easily implement in SAS formats. Here is the idea.

1) Get a data base which has almost all Chinese words + pingying.
2) For each Chinese words taking its first alpha of pingying( it only has 26 groups)
3) Run sas proc fromat to build up a lookup table.

HTH

使用道具

藤椅
pinggu2688 发表于 2009-12-29 05:28:13 |只看作者 |坛友微信交流群
the most critical part is how to get the data base of Chinese words +pinyin
so the upstair's answer is nothing but trash

使用道具

板凳
horace_chen 发表于 2009-12-29 10:48:01 |只看作者 |坛友微信交流群
在EXCEL中可以实现,LZ可以搜索“excel 提取汉字拼音的首字母”

使用道具

报纸
gzjb 发表于 2009-12-29 11:17:56 |只看作者 |坛友微信交流群
Abstracted it  from other source. Hope  it's useful for LZ.
如何提取汉语拼音的首字?一般来说,有两种方法!

  ①函数法:利用vlookup,但有一定的局限性,效率也是问题。

  ②vba法:是最佳的选择,并且,仅使用几行Excel VBA代码就行,为什么这么说呢?因为Excel里利用Vlookup工作表函数和Evaluate方法可以快捷的计算出结果。

  通过如下例子可以看出Excel VBA独有的优势。代码如下

  Public Function MyPY(ByVal vText As Variant) As String
  Application.Volatile
  Dim strResult As String
  Dim lStart As Long
  On Error Resume Next

  For lStart = 1 To Len(vText)
  strResult = strResult & Application.Evaluate("VLookup(""" & Mid(vText, _
                                                                         lStart, 1) & _
                                                                         """,  {""吖"",""A"";""八"",""B"";""嚓"",""C"";""咑"",""D"";""鵽"",""E"";"" 发"",""F"";""猤"",""G"";& _
""铪"",""H"";""夻"",""J"";""咔"",""K"";""垃"",""L"";""嘸"",""M"";""旀"",""N"";""噢"",""O"";&_
""妑"",""P"";""七"",""Q"";""囕"",""R"";""仨"",""S"";""他"",""T"";""屲"",""W"";""夕"",""X"";& _"
"丫"",""Y"";""帀"",""Z""},2,1)")
     Next

  MyPY = strResult

  End Function

  上文自定义函数提取的是纯汉字,但“中华人民共和国123(辽宁)”要求返回“ZHRMGHG(LN)”

“中华人民共和国1-辽宁”返回“ZHRMGHG-LN”怎么办?

  关键点:

  ①排除A~Z a~z 0~9,就是所有字母和数字。

  ②判断是否为每个提取的字符是否汉字。一般判断为汉字可以利用ASC码值判断,这里我提供另一种方法。

  整体代码如下:

  Public Function SuperPY(ByVal vText As Variant) As String

  Application.Volatile
  Dim strResult As String
  Dim lStart As Long
  Dim sTemp As String
  On Error Resume Next

  For lStart = 1 To Len(vText)

  sTemp = VBA.StrConv(Mid(vText, lStart, 1), vbNarrow)
         If sTemp Like "[!A-Z !a-z !0-9]" Then   '排除什么可以在like表达式中修改
             If Len(sTemp) <> LenB(StrConv(sTemp, vbFromUnicode)) Then


                 strResult = strResult & Application.Evaluate("VLookup(""" & Mid(vText, _
                                                                                 lStart, 1) & _
                                                                                 """,{""吖"",""A"";""八"",""B"";""嚓"",""C"";""咑"",""D"";""鵽"",""E"";"" 发"",""F"";""猤"",""G"";& _
""铪"",""H"";""夻"",""J"";""咔"",""K"";""垃"",""L"";""嘸"",""M"";""旀"",""N"";""噢"",""O"";""妑"",& _
""P"";""七"",""Q"";""囕"",""R"";""仨"",""S"";""他"",""T"";""屲"",""W"";""夕"",""X"";""丫"",""Y"";""帀"",""Z""},2,1)")

             Else

                 strResult = strResult & Mid(vText, lStart, 1)
             End If
         End If
  Next

  SuperPY = strResult

  End Functio
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

使用道具

地板
zhangruyang 发表于 2009-12-29 15:16:12 |只看作者 |坛友微信交流群
%MACRO CharToPY(CharName=);/*获得一个汉字的拼音第一个字母*/
OPTIONS SOURCE=0 NOTES=0;
DATA _NULL_;
  TransToHex=put("&CharName",$HEX4.);
  CALL SYMPUT('HexCode',TransToHex);
RUN;
%LET Now=0x&HexCode;
%GLOBAL Out;
%IF ( &Now < 0xB0A1) %THEN %LET Out=&CharName;   
%ELSE %IF ( &Now < 0xB0C5) %THEN %LET Out=A;   
%ELSE %IF ( &Now < 0xB2C1) %THEN %LET Out=B;   
%ELSE %IF ( &Now < 0xB4EE) %THEN %LET Out=C;   
%ELSE %IF ( &Now < 0xB6EA) %THEN %LET Out=D;   
%ELSE %IF ( &Now < 0xB7A2) %THEN %LET Out=E;   
%ELSE %IF ( &Now < 0xB8C1) %THEN %LET Out=F;   
%ELSE %IF ( &Now < 0xB9FE) %THEN %LET Out=G;   
%ELSE %IF ( &Now < 0xBBF7) %THEN %LET Out=H;   
%ELSE %IF ( &Now < 0xBFA6) %THEN %LET Out=J;   
%ELSE %IF ( &Now < 0xC0AC) %THEN %LET Out=K;   
%ELSE %IF ( &Now < 0xC2E8) %THEN %LET Out=L;   
%ELSE %IF ( &Now < 0xC4C3) %THEN %LET Out=M;   
%ELSE %IF ( &Now < 0xC5B6) %THEN %LET Out=N;   
%ELSE %IF ( &Now < 0xC5BE) %THEN %LET Out=O;   
%ELSE %IF ( &Now < 0xC6DA) %THEN %LET Out=P;   
%ELSE %IF ( &Now < 0xC8BB) %THEN %LET Out=Q;   
%ELSE %IF ( &Now < 0xC8F6) %THEN %LET Out=R;   
%ELSE %IF ( &Now < 0xCBFA) %THEN %LET Out=S;   
%ELSE %IF ( &Now < 0xCDDA) %THEN %LET Out=T;   
%ELSE %IF ( &Now < 0xCEF4) %THEN %LET Out=W;   
%ELSE %IF ( &Now < 0xD1B9) %THEN %LET Out=X;   
%ELSE %IF ( &Now < 0xD4D1) %THEN %LET Out=Y;   
%ELSE %IF ( &Now < 0xD7FA) %THEN %LET Out=Z;   
%MEND;
/*%CharToPY(CharName=张);%put &out;*/
%MACRO GetPY(Chinese=);/*获得每个汉字的拼音第一个字母*/
%GLOBAL PY Out;%LET PY=;%LET Out=;
%IF (%str(&Chinese) NE %STR()) %THEN %DO;
  %LET C=%SYSFUNC(COMPRESS(&Chinese));
  %LET LEN=%LENGTH(&C);
  %LET MAX_P=%EVAL(&LEN/2);
  %DO I=1 %TO &MAX_P;
   %LET POS=%EVAL(&I*2-1);
   %LET NOW=%SUBSTR(&C,&POS,2);
   %CharToPY(CharName=&NOW);
   %LET PY=%SYSFUNC(COMPRESS(&PY &Out));
  %END;
%END;
%MEND;
/*%GetPY(Chinese=南京医科大学卫生统计张汝阳);%put &py;*/
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

使用道具

7
haikuoxinkong 发表于 2009-12-29 15:18:58 |只看作者 |坛友微信交流群
好麻烦啊 还是整理数据时做好比较方便吧 推荐excel
sas

使用道具

8
zhangruyang 发表于 2009-12-29 15:34:32 |只看作者 |坛友微信交流群
用程序批量整理
动脑多就动手少

使用道具

9
stata18 发表于 2013-7-6 22:12:47 |只看作者 |坛友微信交流群
zhangruyang 发表于 2009-12-29 15:16
%MACRO CharToPY(CharName=);/*获得一个汉字的拼音第一个字母*/
OPTIONS SOURCE=0 NOTES=0;
DATA _NULL ...
这个程序有个小问题,不能识别多音字。多音字的问题能解决吗?

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 07:27