SAS中不匹配的引号问题

SAS中不匹配的引号问题,sas,quotation-marks,Sas,Quotation Marks,众所周知,SAS需要特别注意句子中的引号 例如 提交时遇到错误 事实上,我需要将数据从另一个数据集中复制到一个数据集中,其中有许多包含引号的记录。分配时,会发生错误,数据步骤停止执行,导致其余代码无效。所以在这种情况下,不可能通过添加重复的引号来修改原始数据集,这是没有意义的 因此,除了添加一个重复的步骤,比如“我愿意”,还有其他方法可以避免错误,或者使数据步骤保持执行吗 谢谢,我不确定您在实际情况下想要实现什么,但在上述情况下,可以解决在数据步骤中删除双引号的问题 %let quoted="I

众所周知,SAS需要特别注意句子中的引号

例如

提交时遇到错误

事实上,我需要将数据从另一个数据集中复制到一个数据集中,其中有许多包含引号的记录。分配时,会发生错误,数据步骤停止执行,导致其余代码无效。所以在这种情况下,不可能通过添加重复的引号来修改原始数据集,这是没有意义的

因此,除了添加一个重复的步骤,比如“我愿意”,还有其他方法可以避免错误,或者使数据步骤保持执行吗


谢谢,

我不确定您在实际情况下想要实现什么,但在上述情况下,可以解决在数据步骤中删除双引号的问题

%let quoted="I'd like to";
data temp;
    set temp;
    quoted=&quoted;
run;

使用宏语言(包括%let命令)时,您不希望使用引号来标识文本字符串。要在字符串中放置单引号,必须使用宏实用程序屏蔽函数之一,如%str()。使用%let在宏变量中放置单个不匹配引号的正确语法如下所示。单引号前的%符号是转义字符,用于告诉SAS应将以下字符(单引号)用作文字。还要注意,我已经从%let中删除了双引号,因为它们不是必需的

%let quoted=%str(I%'d like to);
data temp;    
    quoted="&quoted";
run;
干杯
Rob

您需要发布代码。如果文本变量中有引号,则“将数据从一个数据集复制到另一个数据集”不存在问题,因为它们的值从未在代码中公开。您还可以将要分配给let语句的整个字符串放在%str函数中,如:%let quoted=%str(我愿意);通过这种方式,您可以在不添加另一个%str函数的情况下使用百分比对每个报价进行转义。像往常一样感谢@Rob和@Laurent。你的回答确实让我想起了掩蔽的概念。:)我希望我能自己找到确切的答案。如果你将一个宏变量设置为另一个宏变量,该宏变量可能包含也可能不包含单引号(即,如果你在一个列表上循环,其中一些字符串包含单引号,而另一些不包含单引号),那么有一种方法可以做到这一点?@ToddBurus是的,除了
%str()
之外,还有其他宏引用函数用于您描述的目的。我一时想不起来哪一个是正确的,但我确信如果你发布一个新问题,其中一个比我更擅长宏观引用的人会很快做出回答。@RobertPenridge谢谢。是的,我发现
%superq()
完成了工作。
%let quoted=%str(I%'d like to);
data temp;    
    quoted="&quoted";
run;