楼主: Imasasor
4494 8

将宏变量中的标点符号全部变成空格 [推广有奖]

  • 1关注
  • 64粉丝

VIP

已卖:215份资源

学科带头人

33%

还不是VIP/贵宾

-

TA的文库  其他...

超哥喜欢的文章

威望
1
论坛币
47033 个
通用积分
3.1376
学术水平
238 点
热心指数
246 点
信用等级
231 点
经验
37132 点
帖子
849
精华
3
在线时间
2235 小时
注册时间
2012-7-4
最后登录
2024-10-10

初级学术勋章 初级热心勋章 初级信用勋章 中级热心勋章 中级学术勋章

楼主
Imasasor 发表于 2013-7-7 15:27:43 |AI写论文
288论坛币
我想做一个筛选药物分类的程序,其中第一步列举了要筛选药物的商品名等,
但是各药物之间以各种符号隔开,有全角也有半角,有逗号,括号,顿号等
我建立了一个宏变量如下:

%let drugname=%nrstr(普萘洛尔(心得安),美托洛尔(倍他乐克),阿替洛尔(氨酰心安),比索洛尔(康可),
卡维地洛、拉贝洛尔
氨酰心安、美多心安、醋丁酰心安, 心得静、甲磺胺心安、噻吗心安、柳胺苄心安, 维拉帕米(异搏定,
戊脉安,凡拉帕米,异搏停),
地尔硫卓(恬尔心、硫氮卓酮、合心爽、蒂尔丁),狄戈辛,地毒,拉诺辛;强心素,异羟基洋地黄毒甘,地高辛,异羟基洋地黄毒甙);
%put &drugname;


现在想新生成一个宏变量,将drugname中的所有符号变成"|"或者是空格,并且多个相邻的|或空格变成一个,
如何处理,谢谢各位。

最佳答案

lutian08 查看完整内容

%let drugname=%nrstr(普萘洛尔(心得安),美托洛尔(倍他乐克),;强心素,异羟基洋地黄毒甘,地高辛,异羟基洋地黄毒甙); %put &drugname; data kk; length name $300.; name=prxchange("s/[()、;,,]+/|/",-1,"&drugname"); run; 结果 普萘洛尔|心得安|美托洛尔|倍他乐克|强心素|异羟基洋地黄毒甘|地高辛|异羟基洋地黄毒甙
关键词:标点符号 drug name put 商品名 标点符号
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

沙发
lutian08 发表于 2013-7-7 15:27:44
%let drugname=%nrstr(普萘洛尔(心得安),美托洛尔(倍他乐克),;强心素,异羟基洋地黄毒甘,地高辛,异羟基洋地黄毒甙);
%put &drugname;

data kk;
length name $300.;
name=prxchange("s/[()、;,,]+/|/",-1,"&drugname");
run;

结果
普萘洛尔|心得安|美托洛尔|倍他乐克|强心素|异羟基洋地黄毒甘|地高辛|异羟基洋地黄毒甙

藤椅
Imasasor 发表于 2013-7-7 18:27:16
lutian08 发表于 2013-7-7 18:18
%let drugname=%nrstr(普萘洛尔(心得安),美托洛尔(倍他乐克),;强心素,异羟基洋地黄毒甘,地高辛,异羟基洋地黄 ...
正规真强大啊,我用一个宏程序写了半年才出来
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

板凳
bobguy 发表于 2013-7-7 20:51:49
All can be done within a macro environment.

%let drugname=%nrstr(a,b,;c,d(b),e;f);
%put &drugname;

%let drugname2=%sysfunc(translate(%sysfunc(compbl(%sysfunc(
                translate(&drugname, %str( ), %str(,;%(%)) )))),%str(|), %str( )));

%put &drugname2;

报纸
Imasasor 发表于 2013-7-7 20:58:28
bobguy 发表于 2013-7-7 20:51
All can be done within a macro environment.

%let drugname=%nrstr(a,b,;c,d(b),e;f);
对全角的符号好像没办法
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

地板
bobguy 发表于 2013-7-8 07:08:07
Imasasor 发表于 2013-7-7 20:58
对全角的符号好像没办法
对全角=、 (?) is not a problem.


%let drugname=%nrstr(a,b、b3,;c,d(b),e;f);
%put &drugname;

%let drugname2=%sysfunc(translate(%sysfunc(compbl(%sysfunc(
                translate(&drugname, %str( ), %str(,、;%(%)) )))),%str(|), %str( )));

%put &drugname2;

7
lutian08 发表于 2013-7-8 08:06:43
%let drugname=%nrstr(普萘洛尔(心得安),美托洛尔(倍他乐克),阿替洛尔(氨酰心安),比索洛尔(康可),
卡维地洛、拉贝洛尔
氨酰心安、美多心安、醋丁酰心安, 心得静、甲磺胺心安、噻吗心安、柳胺苄心安, 维拉帕米(异搏定,
戊脉安,凡拉帕米,异搏停),
地尔硫卓(恬尔心、硫氮卓酮、合心爽、蒂尔丁),狄戈辛,地毒,拉诺辛;强心素,异羟基洋地黄毒甘,地高辛,异羟基洋地黄毒甙);


data kk;
length ktran $500 ktran1 $500;
ktran=ktranslate("&drugname",' ',"(),;()、,");
ktran1=compbl(ktran);
run;

这个可以的,用ktranslate函数把字符全部转化为空格,然后用compbl保留一个空格

8
lutian08 发表于 2013-7-8 08:07:58
bobguy 发表于 2013-7-8 07:08
对全角=、 (?) is not a problem.
用中文试,就是楼主的那些文字,中文在处理过程中经常出问题,有时部分中文会出现乱码

9
oneoneagain 发表于 2013-7-25 10:41:26
好强大

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

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