从字符串中删除撇号(压缩?)

时间:2009-04-03 16:54:41

标签: sas compression

我有一个看起来像这样的字符串:

 "ABAR_VAL", "ACQ_EXPTAX_Y",  "ACQ_EXP_TAX", "ADJ_MATHRES2"

我希望它看起来像这样:

ABAR_VAL ACQ_EXPTAX_Y ACQ_EXP_TAX ADJ_MATHRES2

即。没有撇号或逗号和单个空格分开。

SAS 9.1.3中最干净/最短的方法是什么?

最好是:

call symput ('MyMacroVariable',compress(????,????,????))

为了清楚起见,结果需要单个空格分隔,没有标点符号,并包含在宏变量中。

3 个答案:

答案 0 :(得分:6)

你去..

data test;
var1='"ABAR_VAL", "ACQ_EXPTAX_Y",  "ACQ_EXP_TAX", "ADJ_MATHRES2"';
run;

data test2;
set test;
call symput('macrovar',COMPBL( COMPRESS( var1,'",',) ) );
run;

%put &macrovar;

答案 1 :(得分:2)

这是infile语句的一部分还是你确实想要创建包含这些值的宏变量?如果这是infile语句的一部分,如果正确设置了分隔符,则不需要执行任何操作。

infile foo DLM=',' ;

是的,您确实可以使用compress函数从字符串中删除特定字符,无论是在数据步骤中还是作为宏调用的一部分。

COMPRESS(source<,characters-to-remove>)

示例数据:

data temp;
     input a $;
datalines;
"boo" 
"123" 
"abc"
;
run;

解决数据步骤中的问题(而不是创建宏变量):

data temp2; set temp;
a=compress(a,'"');
run;

在生成宏变量时解决问题:

data _null_; set temp; 
call symput('MyMacroVariable',compress(a,'"'));
run;
%put &MyMacroVariable.;

如果使用后一个代码,则必须遍历观察结果才能看到压缩值是每个记录的变量。 :)

答案 2 :(得分:0)

要将多个空格压缩为一个空格,请使用compbl:http://www.technion.ac.il/docs/sas/lgref/z0214211.htm