楼主: whymath
945 2

[程序分享] 检测文本是否包含任意汉字 [推广有奖]

  • 1关注
  • 16粉丝

实习版主

已卖:43份资源

副教授

21%

还不是VIP/贵宾

-

威望
0
论坛币
5811 个
通用积分
708.0583
学术水平
126 点
热心指数
145 点
信用等级
88 点
经验
22480 点
帖子
581
精华
2
在线时间
608 小时
注册时间
2018-5-31
最后登录
2025-10-29

楼主
whymath 发表于 2022-12-19 19:24:46 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
有测试数据集如下:
  1. data have;
  2.   input string $42.;
  3.   cards;
  4. 42anyhan
  5. 42任何汉字
  6. 42any汉字
  7. 42 +_@#$汉字
  8. 42龼龽龾龿鿀鿁汉字
  9. أي كانجي
  10. テストします
  11. Путин
  12.   ;
  13. run;
复制代码

以下程序可检验字符型变量是否包含任意汉字(基本汉字,Unicode编码范围4E00-9FA5)。
  1. data want;
  2.   set have;

  3.   *Any character from [HAN];
  4.   array _han_{0:20901}$4._temporary_;
  5.   if _n_=1 then do i=0 to 20901;
  6.     _han_[i]=unicode(cats('\u',put(i+4e00x,hex4.)));
  7.   end;
  8.   l=klength(string);
  9.   do i=1 to l;
  10.     if ksubstr(string,i,1) in _han_ then do;
  11.       r=index(string,ksubstr(string,i,1));
  12.       leave;
  13.     end;
  14.     if i=l then r=0;
  15.   end;
  16. run;
复制代码

结果截图如下:
1.png
变量r返回了首个汉字出现的位置,若字符串不包含任何汉字,则变量r的值为0。

注:结果变量r的值与SAS会话的编码有关,以上截图是在Unicode编码环境下取得的。
二维码

扫码加我 拉你入群

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

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

关键词:Character TEMPORARY unicode string SUBSTR

已有 1 人评分经验 学术水平 热心指数 信用等级 收起 理由
dxystata + 100 + 1 + 2 + 1 精彩帖子

总评分: 经验 + 100  学术水平 + 1  热心指数 + 2  信用等级 + 1   查看全部评分

查看我的精华帖:免费的 SAS 软件

沙发
dxystata 发表于 2022-12-20 10:02:30
如何检测包含几个汉字呢

藤椅
whymath 发表于 2022-12-20 11:33:51
dxystata 发表于 2022-12-20 10:02
如何检测包含几个汉字呢
可将do i=1 to l  部分的程序变更为
  1.   do i=1 to l;
  2.     r=sum(r,ksubstr(string,i,1) in _han_);
  3.   end;
复制代码
已有 1 人评分经验 学术水平 热心指数 收起 理由
dxystata + 100 + 1 + 2 观点有启发

总评分: 经验 + 100  学术水平 + 1  热心指数 + 2   查看全部评分

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-7 21:45