Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sas 删除宏变量值列表中的单引号_Sas - Fatal编程技术网

Sas 删除宏变量值列表中的单引号

Sas 删除宏变量值列表中的单引号,sas,Sas,我有一个包含多个程序的项目。每个程序都有一个proc SQL语句,该语句将在WHERE子句中的条件中使用相同的值列表;但是,所需的一个数据库表的列类型是字符类型,而另一个数据库表的列类型是数字类型 因此,我有一个“客户机ID”值列表,我希望将其放入宏变量中,因为这些ID可以更改,我希望在变量中更改一次,而不是在多个程序中更改 例如,我这样设置了这个宏变量,它在proc SQL中工作,proc SQL查询字符列: %let CLNT\u ID\u STR=('179966','200829','2

我有一个包含多个程序的项目。每个程序都有一个proc SQL语句,该语句将在WHERE子句中的条件中使用相同的值列表;但是,所需的一个数据库表的列类型是字符类型,而另一个数据库表的列类型是数字类型

因此,我有一个“客户机ID”值列表,我希望将其放入宏变量中,因为这些ID可以更改,我希望在变量中更改一次,而不是在多个程序中更改

例如,我这样设置了这个宏变量,它在proc SQL中工作,proc SQL查询字符列:
%let CLNT\u ID\u STR=('179966','200829','201104','211828','264138')

过程SQL部分:
…在&CLNT\u ID\u STR.

我想创建另一个宏变量,比如CLNT_ID_NUM,它接受第一个变量(CLNT_ID_STR),但删除引号

所需输出:
(1799662008292011042118282828282264138)

过程SQL部分:
…IN&CLNT\u ID\u NUM.


我尝试过使用
sysfunc
dequote
translate
函数,但还没有找到答案。

translate似乎不希望允许使用空字符串作为替换

下面使用TRANSTRN,将单引号转换为null没有问题:

1    %let CLNT_ID_STR = ('179966', '200829', '201104', '211828', '264138');
2    %let want=%sysfunc(transtrn(&clnt_id_str,%str(%'),%str())) ;
3    %put &want ;
(179966, 200829, 201104, 211828, 264138)

它使用宏引号函数%str()来屏蔽单个引号的含义。

TRANSLATE似乎不希望使用空字符串作为替换

下面使用TRANSTRN,将单引号转换为null没有问题:

1    %let CLNT_ID_STR = ('179966', '200829', '201104', '211828', '264138');
2    %let want=%sysfunc(transtrn(&clnt_id_str,%str(%'),%str())) ;
3    %put &want ;
(179966, 200829, 201104, 211828, 264138)

它使用宏引号函数%str()来屏蔽单个引号的含义。

删除单个引号的其他三种方法是
压缩
翻译
交换

%let CLNT_ID_STR = ('179966', '200829', '201104', '211828', '264138');

%let id_list_1 = %sysfunc(compress (&CLNT_ID_STR, %str(%')));
%let id_list_2 = %sysfunc(translate(&CLNT_ID_STR, %str( ), %str(%')));
%let id_list_3 = %sysfunc(prxchange(%str(s/%'//), -1, &CLNT_ID_STR));

%put &=id_list_1;
%put &=id_list_2;
%put &=id_list_3;

----- LOG -----

ID_LIST_1=(179966, 200829, 201104, 211828, 264138)
ID_LIST_2=( 179966 ,  200829 ,  201104 ,  211828 ,  264138 )
ID_LIST_3=(179966, 200829, 201104, 211828, 264138)

TRANSLATE
用一个空格(
)替换
)实际上并不重要,因为解释的上下文是数字的。

删除单引号的其他三种方法是
压缩
TRANSLATE
PRXCHANGE

%let CLNT_ID_STR = ('179966', '200829', '201104', '211828', '264138');

%let id_list_1 = %sysfunc(compress (&CLNT_ID_STR, %str(%')));
%let id_list_2 = %sysfunc(translate(&CLNT_ID_STR, %str( ), %str(%')));
%let id_list_3 = %sysfunc(prxchange(%str(s/%'//), -1, &CLNT_ID_STR));

%put &=id_list_1;
%put &=id_list_2;
%put &=id_list_3;

----- LOG -----

ID_LIST_1=(179966, 200829, 201104, 211828, 264138)
ID_LIST_2=( 179966 ,  200829 ,  201104 ,  211828 ,  264138 )
ID_LIST_3=(179966, 200829, 201104, 211828, 264138)

用一个空格(
)替换
'
)实际上并不重要,因为解释的上下文是数字的。

这满足了我的需要。非常感谢。这满足了我的需要。非常感谢。