Syntax 关于连接运算符的一些问题||
关于SAS中的以下程序,我有一个问题Syntax 关于连接运算符的一些问题||,syntax,sas,Syntax,Sas,关于SAS中的以下程序,我有一个问题 data staff; jobA='FA'; jobB='1'; jobA=jobA||jobB; run; proc print; run; 为什么jobA的产量仍然是FA 我认为它应该更新,但由于某些原因它保持不变。。。它与jobA最初定义时的原始长度有什么关系吗?数据步字符变量与其他编码语言中的字符串变量不同。每个数据步长变量都有一个固定的长度。可变长度可以是: 使用长度或属性语句显式声明(首次使用前
data staff;
jobA='FA';
jobB='1';
jobA=jobA||jobB;
run;
proc print;
run;
为什么jobA的产量仍然是FA
我认为它应该更新,但由于某些原因它保持不变。。。它与jobA最初定义时的原始长度有什么关系吗?数据步字符变量与其他编码语言中的字符串变量不同。每个数据步长变量都有一个固定的长度。可变长度可以是:
- 使用
或长度
语句显式声明(首次使用前)属性
- 通过
、set
、MERGE
或UPDATE
语句从贡献数据集“继承”MODIFY
- 或根据其在数据步骤程序中的首次使用情况推断
jobA
的长度为$2,因为它的第一个用法是上下文,即有两个字符的'FA'
。同样,jobB
的长度为$1
对于您的特定问题,连接结果的长度为3个字符,并存储在一个2个字符的变量中。当结果存储在变量中时,会发生静默(无日志消息)截断
所有字符变量都隐式地用空格填充到其长度,这是连接时的一个重要考虑因素——有时连接时,您会挠头问,结果的其余部分在哪里?或者为什么在后续部分之前有这么多空格
组合值时,串联运算符(|
)不会修剪尾随空格。当目标变量的长度不足以包含组合的所有变量的长度时,这可能会导致混淆——串联将显示为“未发生”。在古代,编码模式trim(左(变量-1))| | trim(左(变量-2))| | | | trim(左(变量-n))
被用来避免这种情况
今天的SAS有一系列连接函数(cat
,cats
,catt
,catx
,catq
),它们使组合字符表达式变得更容易
考虑阅读SAS文档正确,jobA将初始化为$2.,因此不够长,无法保存大于2个字符的串联值。^^^这应该是答案!谢谢你的帮助!我正在进行基本的SAS认证,没有解释,我无法理解这是如何工作的。@hyg17-如果您想通过解释练习问题,您可以尝试(免责声明,我的公司拥有该网站)谢谢您,我还是SAS的新手,但您的解释非常清楚和详细。