【问题标题】:Trailing Blanks SAS尾随空白 SAS
【发布时间】:2019-04-23 14:12:40
【问题描述】:

我正在尝试清理一些数据。在变量“教育水平”下,我有多个关于持有硕士学位的观察结果。例如。 “硕士”“硕士学位”“硕士学位”。我将它们组织成一个值:使用 IF-THEN 语句的“硕士学位”。但是,我有另一个条目,其结尾有空格,名为“Masters Degree”,IF-THEN 语句没有提取该条目。我怎样才能减少这个?

我研究了一些函数来处理这个问题,例如 TRIM(),但我真的不明白如何实现这些,因为我是 SAS 新手。

这就是我尝试整理用于之前变量的数据和格式的方式:

data libref.name;
  set libref.name;

  if Var1 = "Masters" then Var1 = "Masters Degree";

  if Var1 = "Master's" then Var1 = "Masters Degree";

  if Var1 = "Master Degree  " then Var1 = "Masters Degree";    
run;

我只是想将“硕士学位”观察结果转换为“硕士学位”

【问题讨论】:

  • 您的 LIBREF 是否指向外部数据库?喜欢甲骨文?

标签: sas


【解决方案1】:

这不是问题,因为“硕士学位”与“硕士学位”相同

data _NULL_;
    if "Master Degree " = "Master Degree" then put "EQUAL";
    else put "DIFFERENT";
run;

将输出:

8    data _NULL_;
9        if "Master Degree " = "Master Degree" then put "EQUAL";
10       else put "DIFFERENT";
11   run;

EQUAL
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds

这是因为 SAS 通过比较忽略任何尾随空格。这是因为 SAS 会在您将字符串附加到比该变量短的变量时附加尾随空格。

但是你说另一个是“硕士学位”,这与“硕士学位”不同

【讨论】:

  • 我知道你已经提到它,但可能值得明确强调一个“大师”后面有一个“s”,因为他们在自己的测试中错过了它,那么他们也可能在您的答案(甚至对于任何后续读者)。
  • 我写了一些错别字,可能会造成混淆。当使用 PROC FREQ 时,“Master Degree”和“Master Degree”肯定被认为是两个不同的东西,并且在 IF 语句中,相同的观察结果但带有尾随空格不会相互提取,例如如果“高中”不会选择“高中”。最后,我使用了 =: 一次捕获所有相似的观察结果
  • 在这种情况下,空格不是空格。它可以是任何不显示的字符。如制表符'09'x,换行'0A'x。回车 '0D'x、null '00'x 或不间断空格 'A0'x。
  • 在比较字符串时,您是否有指向有关忽略尾随空格的官方来源的链接?我已经多次看到这个事实,但似乎无法在 SAS 文档中找到它。
【解决方案2】:

如果您想转换以“Master”开头的所有内容,请在= 之后使用: 运算符,其作用类似于通配符。

if Var1 =: "Master" then V22 = "Masters Degree"

【讨论】:

  • 是的,这正是我最终要做的。谢谢!
  • LukeBirkett 很高兴您提供了反馈,您也应该能够接受@Longfish 的回复作为最佳答案。
猜你喜欢
  • 2014-02-01
  • 1970-01-01
  • 2022-10-21
  • 2012-08-31
  • 2023-04-01
  • 2011-01-16
  • 2018-04-15
  • 1970-01-01
  • 2015-12-29
相关资源
最近更新 更多