gpt4 book ai didi

sas - 使用 %PUT 正确格式化动态文件名

转载 作者:行者123 更新时间:2023-12-01 05:01:35 25 4
gpt4 key购买 nike

我有一个 SAS 脚本,它读取 CSV 文件并将其存储在 SAS 数据集中:

LIBNAME IN '\\path\Data';
FILENAME CSV '\\path\Data\DT.csv';

DATA IN.DT;
INFILE CSV DLM=',' DSD FIRSTOBS=1;
INPUT KEY VALUE1 VALUE2;
RUN;

我想改变它,而不是期望输入被命名为 DT.csv,它会接受一个名为 DT-2016-03-03-TEST.csv< 的输入,或任何当前日期。换句话说,我需要在我的 FILENAME 语句中使用动态值。

这是我目前所拥有的:

%LET curday   = %SYSFUNC(day("&sysdate"d));
%LET curmonth = %SYSFUNC(month("&sysdate"d));
%LET curyear = %SYSFUNC(year("&sysdate"d));

%PUT %SYSFUNC(PUTN(&curday, z2.));

FILENAME CSV "\\path\Data\DT-&curyear-&curmonth-&curday-TEST.csv";

但它生成的字符串类似于 Data\DT-2016-3-3-TEST.csv 而不是 Data\DT-2016-03-03-TEST.csv

换句话说,尾随零不存在。我做错了什么?

最佳答案

您需要使用一个宏变量或一大组宏函数(无论您喜欢哪个)。为了便于阅读,我们将继续创建宏变量。根据您所说的内容,我们了解了有关该模式的一些信息:

  1. DT-开头
  2. 它以 yyyy-mm-dd 格式显示今天的日期
  3. .csv结尾

其中两个是静态值,一个需要是特定格式的动态值。让我们开始吧。

首先将路径存储在它自己的宏变量中。这使得代码更适用于其他应用程序(即,您可以为新程序复制/粘贴旧代码!在编程世界中偷懒是件好事)。

%let path =\\path\data;

接下来,让我们使用 %let 语句构建我们的动态模式。我们知道它以 DT- 开头:

_____________________________________________

%let file = DT-

_____________________________________________

我们现在可以从列表中删除#1!让我们淘汰#2。

两个函数将帮助我们按照我们想要的顺序获得它:

  1. %sysfunc()
  2. 今天()

我们将用%sysfunc()封装today()%sysfunc() 让我们可以运行大多数非宏语言 SAS 函数,并且还有一个额外的好处,即使用附加参数以您希望的格式返回值。这对我们这里真的很有帮助。

因此,让我们将今天的日期作为数字 SAS 日期,然后将其转换为 yymmddx10 格式,其中 x 是一些分隔符关键字。我们将使用 yymmddd10. - 即指定 yyyy-mm-dd 的格式。额外的 d 表示破折号。

_____________________________________________

%let file = DT-%sysfunc(today(), yymmddd10.)

_____________________________________________

2 现在不在了。困难的部分结束了!我们需要做的就是将 .csv 附加到它,我们就准备好了。

_____________________________________________

%let file = DT-%sysfunc(today(), yymmddd10.).csv;

_____________________________________________

您可以使用 %put 语句确认宏变量 file 的值:

%put 注意:这是我的文件名:&file;

您应该在日志中看到绿色文本 注意:这是我的文件名:DT-2016-03-03.csv

现在,我们将把它们放在一起:

%let path = \\path\data;
%let file = DT-%sysfunc(today(), yymmddd10.).csv;

libname IN "&path";
filename CSV "&path\&file";

data in.DT;
infile csv dlm=',' dsd firstobs=1;
input key value1 value2;
run;

您现在拥有了一种动态方式来读取这些 CSV,并且您可以在其他地方调整此代码。很棒的酱。我想你已经为自己赢得了一杯庆祝咖啡,也许还有一两 block 意大利脆饼;不要太疯狂。

关于sas - 使用 %PUT 正确格式化动态文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35774693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com