syntax - SAS 关于串联运算符 || 的一些问题

标签 syntax sas

我对 SAS 中的以下程序有疑问。

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

 proc print;

 run;

为什么jobA的输出还是FA?

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

最佳答案

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

  • 使用 LENGTH 显式声明(在首次使用之前)或ATTRIBUTE声明,
  • 通过 SET 从贡献数据集“继承” , MERGE , UPDATEMODIFY声明,
  • 或者是从数据步骤程序中首次使用时根据上下文推断出来的。

正如 Chris J 在评论中正确回答的那样,jobA长度为 $2,因为它的第一次使用是上下文为 'FA'其中有两个字符。同样,jobB长度为 1 美元。

对于您的具体问题,串联结果的长度为 3 个字符,并存储在 2 个字符的变量中。当结果存储在变量中时,会发生静默(无日志消息)截断。

所有字符变量的尾部都隐式地用空格填充到其长度,这是连接时的一个重要考虑因素 - 有时连接时您会挠头并问,结果的其余部分在哪里?或者为什么在那里后续部分之前有这么多空格?

在组合值时,串联运算符 ( || ) 不会修剪尾部空格。当目标变量的长度不足以包含要组合的所有变量的长度时,这可能会导致困惑 - 连接看起来“没有发生”。在过去的编码模式trim(left(variable-1))||trim(left(variable-2))||..||trim(left(variable-n))用于避免这种情况。

如今,SAS 有一个串联函数系列( catcatscattcatxcatq ),这使得组合字符表达式变得更加容易。

考虑阅读 SAS 文档 Step-by-Step Programming with Base SAS, Combining Character Values: Using Concatenation

关于syntax - SAS 关于串联运算符 || 的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52902581/

相关文章:

null - 如果在 sas 中过滤后输出为空,如何显示消息

javascript - 我怎样才能简化这个 jquery/javascript

c++ - 使用引用传递和值传递参数的麻烦执行程序

java - 如何在 Java 中为复杂的泛型类型创建别名?

sas - 如何按高度而不是按字母顺序对条形图的条形进行排序

regex - 如何删除SAS中两个字符串之间的所有字符(0个或多个)

Scala 的非大括号 IF 语句

ruby - 如何使用 'do' 关键字语法创建接受匿名函数的函数?

sql - SAS中的/这个数据语句到底在做什么? PostgreSQL 等效?

sas - 使用正则表达式删除宏变量括号内的文本