gpt4 book ai didi

macros - 用英文字符替换土耳其字符

转载 作者:行者123 更新时间:2023-12-01 15:04:11 24 4
gpt4 key购买 nike

我有一个包含 120 列的表格,其中一些包含土耳其语字符(例如“ç”、“ğ”、“ı”、“ö”)。所以我想用英文字符替换这个土耳其字符(例如“c”,“g”,“i”,“o”)。当我使用“TRANWRD 函数”时,它可能真的很难,因为我应该编写该函数 120 次,有时列名可能会更改,因此我必须一一检查代码。

是否有一个简单的宏来替换所有列中的这些字符。

最佳答案

编辑

回想起来,这是一个过于复杂的解决方案...应该使用 translate() 函数,正如另一位用户指出的那样。当重复使用时,它可以集成到用 PROC FCMP 定义的 SAS 函数中。


正则表达式和 DO 循环的组合可以实现这一点。

第一步:按照以下方式构建转换表

解析为相同替换字符的重音字母放在一行中,由 | 分隔符号。

data conversions;
infile datalines dsd;
input orig $ repl $;
datalines;
ç,c
ğ,g
ı,l
ö|ò|ó,o
ë|è,e
;

第 2 步:将原始字符串和替换字符串存储在宏变量中

proc sql noprint;
select orig, repl, count(*)
into :orig separated by ";",
:repl separated by ";",
:nrepl
from conversions;
quit;

第 3 步:进行实际转换

为了展示它的工作原理,我们只处理一列。

data convert(drop=i re);
myString = "ç ğı òö ë, è";
do i = 1 to &nrepl;
re = prxparse("s/" || scan("&orig",i,";") || "/" || scan("&repl",i,";") || "/");
myString = prxchange(re,-1,myString);
end;
run;

结果 myString:“c gl oo e, e”

为了处理所有字符列,我们使用数组

假设您的表名为 mySource 并且您希望处理所有字符变量;我们将为此创建一个名为 cols 的向量。

data convert(drop=i re);
set mySource;
array cols(*) _character_;
do c = 1 to dim(cols);
do i = 1 to &nrepl;
re = prxparse("s/" || scan("&orig",i,";") || "/" || scan("&repl",i,";") || "/");
cols(c) = prxchange(re,-1,cols(c));
end;
end;
run;

关于macros - 用英文字符替换土耳其字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38008708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com