Syntax 关于连接运算符的一些问题||

Syntax 关于连接运算符的一些问题||,syntax,sas,Syntax,Sas,关于SAS中的以下程序,我有一个问题 data staff; jobA='FA'; jobB='1'; jobA=jobA||jobB; run; proc print; run; 为什么jobA的产量仍然是FA 我认为它应该更新,但由于某些原因它保持不变。。。它与jobA最初定义时的原始长度有什么关系吗?数据步字符变量与其他编码语言中的字符串变量不同。每个数据步长变量都有一个固定的长度。可变长度可以是: 使用长度或属性语句显式声明(首次使用前

关于SAS中的以下程序,我有一个问题

 data staff;
      jobA='FA';
      jobB='1';
      jobA=jobA||jobB;
 run;

 proc print;

 run;
为什么jobA的产量仍然是FA


我认为它应该更新,但由于某些原因它保持不变。。。它与jobA最初定义时的原始长度有什么关系吗?

数据步字符变量与其他编码语言中的字符串变量不同。每个数据步长变量都有一个固定的长度。可变长度可以是:

  • 使用
    长度
    属性
    语句显式声明(首次使用前)
  • 通过
    set
    MERGE
    UPDATE
    MODIFY
    语句从贡献数据集“继承”
  • 或根据其在数据步骤程序中的首次使用情况推断
正如Chris J在他的评论中正确回答的那样,
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的新手,但您的解释非常清楚和详细。