【问题标题】:Set field format length and length of string to the string length by row in a macro在宏中逐行设置字段格式长度和字符串长度为字符串长度
【发布时间】:2013-11-30 17:19:38
【问题描述】:

我已经构建了一些宏代码,将字段的给定行中的值传递给宏变量,然后将其用作字符串的一部分以从网站下拉 CSV 文件。我尝试将此字段设置为默认长度为 8 美元。在“CALL SYMPUT”语句中。

这不起作用,因为大多数(但不是全部)字符串长度为 4。当代码在日志中运行时,您可以看到 URL 中的尾随空格被提交到网站并且代码失败。

当我用 4 美元的“CALL SYMPUT”长度尝试它时。它适用于那些长度为四个字符的字符串。

这一切都可以,除了一些字符串是六个字符中的一、二、三、五。我尝试以 %let mynewvar =%trim(&myoldvar.);' 的方式使用 '%TRIM' 函数但它会导致相同的错误,即 URL 中提交的宏变量有尾随空格...

...我做错了什么?

谢谢

【问题讨论】:

  • 你能提供使用宏变量并形成URL的代码的sn-p吗?在这个简单的示例数据 null 中,%trim 似乎对我很有效;调用 symput('FOO','abc');跑; %放XX&FOO.XX; %put XX%trim(&FOO.)XX; `

标签: sas


【解决方案1】:

如果您在数据步骤中使用 CALL SYMPUT(),请尝试使用 STRIP() 函数删除空格。

data _null_;
x = "abcd    ";
call symput("x",strip(x));
run;

%put X is __&x.__;

返回:

3735   %put X is __&x.__;
X is __abcd__

【讨论】:

  • 另外一件事,这与其说是一个要求,不如说是一个小问题……我使用这个文件路径“finance.yahoo.com/d/quotes.csv?s=&var2.&f=&var3”。现在它可以满足我的要求...但是 SAS 正在尝试将字符串的“&f”部分解析为宏变量,但它不是...它只会发出警告而不是错误,但我仍然想摆脱它...如果我使用 %QUOTE 会抑制 & 符号,还是会抑制我的宏变量?
【解决方案2】:

您可以尝试CALL SYMPUTX,它左对齐并修剪尾随空格。

如果我们能看到一些示例代码会更容易为您提供帮助。

【讨论】:

    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      相关资源
      最近更新 更多