gpt4 book ai didi

SAS 替换所有列中的字符

转载 作者:行者123 更新时间:2023-12-02 08:19:06 26 4
gpt4 key购买 nike

我有一个 SAS 数据集,我必须将其导出到 .csv 文件。我有以下两个相互矛盾的要求。

  • 我必须使用分号 作为 .csv 文件中的分隔符。

  • 一些字符变量是从公式中手动输入的字符串,因此它们可能包含分号

我对上述问题的解决方案是转义分号或将其替换为逗号。

我怎样才能以一种漂亮、干净和高效的方式使用例如tranwrd在整个数据集上?


我的尝试:

对于每个变量,对数据集中的变量使用 tranwrd(.., ";", ",") 函数。更新数据集并遍历所有变量。然而,对于半大型数据集来说,这自然是一种非常低效的方法,因为我必须为每个变量做一个数据步。它的代码非常丑陋,因为我必须通过几步来获取变量名,但效率低下绝对是问题所在。

data test;
input w $ c b d e $ f $;
datalines4;
Aaa;; 50 11 1 222 a;s
Bbb 35 12 2 250 qw
Comma, 75 13 3 foo zx
;;;;
run;

* Get the variable names;
proc contents data=test out=vars(keep=name type varnum) order=varnum noprint;
run;
* Sort by variable number;
proc sort data=vars;
by varnum;
run;

* Put variable names into a space-separated string;
proc sql noprint;
select compress(name)
into :name_list separated by ' '
from vars;
quit;

%let len = %sysfunc(countw(&name_list));


*Initialize loop dataset;
data a;
set test;
run;

%macro loop;
%do i = 1 %to &len;
%let j = %scan(&name_list,&i);

data a(rename=(v_&j = &j) drop=&j);
set a;
v_&j.=compress(tranwrd(&j,";",","));
run;
%end;
%mend;
%loop;

最佳答案

我想我可能对你的问题有更优雅的解决方案:

data class;
set sashelp.class;

array vars [*] _character_;

do i = 1 to dim(vars);
vars[i] = compress(tranwrd(vars[i],"a","X"));
end;

drop i;
run;

您可以使用array 来引用数据集中的所有字符列,然后遍历它们。

关于SAS 替换所有列中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39032909/

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