首页 > 解决方案 > SAS 宏变量在变量名 Proc Http 中转义撇号

问题描述

我已经为此工作了 3 天,并尝试了所有我能想到的方法,包括 %str()、%bquote()、translate() 和 tranwrd() 来用双撇号或 %' 替换单个撇号</p>

下面的数据步骤和宏工作正常,直到我找到一个包含撇号的姓氏,例如 O'Brien。然后,由于未闭合的左括号,我遇到了语法错误。下面的代码我留下了我认为最接近包含的 tranwrd 的代码。

非常感谢您提供的任何帮助。

%macro put_data (object1,id);
Proc http
method=“put”
url=“https://myurl/submissionid/&id”
in=&object1;
Headers “content-type”=“application/json”;
Run;
%mend;

data _null_;
Set work.emp_lis;
call execute(catt(‘%put_data(‘,’%quote(‘’{“data”:{“employeeName”:”’,tranwrd(employeeName,”’’”,”’”),’”}}’’),’,id,’)’));
run;

克雷格

标签: sassas-macro

解决方案


我能够发现我的代码与 tranwrd 语句的问题是向后的,它需要移动到 proc sql create table 语句。我还需要将 &object1 包含在 %bquote 中。这是最终有效的代码。在 tranwrd 中创建表换行变量时,如下所示。

tranwrd(员工姓名,“'“,”''”)

% macro put_data (object1,id);
Proc http
method=“put”
url=“https://myurl/submissionid/&id”
in=%bquote(&object1);
Headers “content-type”=“application/json”;
Run;
%mend;

data _null_;
Set work.emp_lis;
call execute(catt(‘%put_data(‘,’%quote(‘’{“data”:{“employeeName”:”’,employeeName,’”}}’’),’,id,’)’));
run;


推荐阅读