当我为特定的WHERE执行SELECT...INTO
语句时,它会导致在结尾处出现随机单引号。我正在使用proc sql通过SAS运行以下
proc sql noprint;
SELECT DISTINCT PrimaryAgent, PrimaryAgentName
INTO :AgentID separated by '|', :AgentName separated by '|'
FROM test.OUTPUT_REPORTDATATAB
WHERE Region = "Western" AND District = "Saskatchewan";
quit;
AgentID将所有值分隔为|像往常一样,但当我去做%put时,AgentName最后会有一个引号(例如test | test2 | test3')。
这个问题只发生在Region和District的组合中,任何其他组合都可以。
我注意到这个Region和District组合位于数据集的底部,但我想如果那是问题的根源,它会导致AgentID和AgentName出现同样的问题。
关于可能导致此问题的任何想法?或者我可以删除这个单引号?
我已尝试substr
和translate
但我尝试传递&AgentName
。它打破了这个功能(说我错过了一个括号)。
我甚至尝试在前面添加转义和非转义单引号,因此它至少有匹配的引号,但似乎无法正常工作无论是。
答案 0 :(得分:1)
首先确保您没有尝试将太多字符放入宏变量中。宏变量只能是65K个字符。
SAS不会插入任何不在您数据中的字符。因此,如果您将@media screen and (min-width:600px) {
#logo {
float: left;
}
.menu {
width: 100%;
height: 70px;
position: absolute;
display: block;
}
.menu-icon {
display: none;
}
header {
height: 70px;
background-color: #FFF;
margin: auto;
width: 100%;
}
nav {
height: -66px;
width: 100%;
}
nav ul {
background-color: #FFF;
display: inline;
float: right;
padding: 0.55em 2em 0 0;
height: inherit;
}
nav ul li {
display: inline;
margin: 0.2em auto;
}
nav ul li:hover {
background-color: #FFF;
}
nav ul li a {
padding: 0 2em;
}
视为宏变量值的一部分,那么大部分都是您用来填充它的数据集变量值的一部分。
检查变量AgentID和AgentName是否有引号。
如果您还没有找到,请检查其他非打印字符,这些字符可能会被宏处理器混淆为引号,或者在打印到LOG时看起来像是引号。
答案 1 :(得分:0)
%put &agentName.;
对我来说,回报 - 正是我所期待的。
Name 1|Name 3|Name 6
您可以发布您的进入数据集 - 或至少一些相关记录吗?或者,这是我写的代码 - 看看是否有什么不同于你所得到的。但是这里有用的块从你的帖子中被扯掉了100%(添加了noprint用于测试)。
data output_reportdatatab;
primaryAgent=1; primaryAgentName="Name 1"; region="Western"; District="Saskatchewan"; output;
primaryAgent=2; primaryAgentName="Name 2"; region="Eastern"; District="Saskatchewan"; output;
primaryAgent=3; primaryAgentName="Name 3"; region="Western"; District="Saskatchewan"; output;
primaryAgent=3; primaryAgentName="Name 3"; region="Eastern"; District="Saskatchewan"; output;
primaryAgent=3; primaryAgentName="Name 3"; region="Western"; District="Saskatchewan"; output;
primaryAgent=3; primaryAgentName="Name 3"; region="Western"; District="Saskatchewan"; output;
primaryAgent=4; primaryAgentName="Name 4"; region="Western"; District="Alberta"; output;
primaryAgent=4; primaryAgentName="Name 4"; region="Western"; District="Manitoba"; output;
primaryAgent=5; primaryAgentName="Name 5"; region="Eastern"; District="British Columbia"; output;
primaryAgent=6; primaryAgentName="Name 6"; region="Western"; District="Saskatchewan"; output;
run;
proc sql noprint;
SELECT DISTINCT PrimaryAgent, PrimaryAgentName
INTO :AgentID separated by '|', :AgentName separated by '|'
FROM OUTPUT_REPORTDATATAB
WHERE Region = "Western" AND District = "Saskatchewan";
quit;
%put &agentName.;
答案 2 :(得分:0)
假设单引号实际上在数据中 - 我认为很有可能,特别是当你说它是数据集中的最后一行时;可能您的输入数据中有引号 - 您可以使用compress
将其删除。
proc sql;
SELECT DISTINCT compress(PrimaryAgent,"'") , compress(PrimaryAgentName,"'")
INTO :AgentID separated by '|', :AgentName separated by '|'
FROM test.OUTPUT_REPORTDATATAB
WHERE Region = "Western" AND District = "Saskatchewan";
quit;
Bingo,没有单引号(假设这些字段通常不允许使用单引号)。如果他们有时被允许进入这些领域,那么这是一个棘手的问题,需要您提供更多信息才能回答。