gpt4 book ai didi

macros - 在 SAS 中自动化表/对象名称扫描和搜索

转载 作者:行者123 更新时间:2023-12-04 04:47:06 24 4
gpt4 key购买 nike

好的,我将从问题开始:
我每周都会创建以以下格式命名的产品表:

products_20130701
products_20130708
.
.
.

我正在尝试自动执行一些广告系列分析,这样我就不必每周手动更改代码中的表名称来使用我的广告系列最大结束日期之后的第一个产品表。

例如
%put &max_enddate.; 
/*20130603*/

我 6 月份的产品表是:
products_20130602
*products_20130609*
products_20130616
products_20130623

在这种情况下,我想使用列表中的第二个表,忽略超过 12 个月的产品表,只选择日期在我的 max_enddate 宏之后的表。

我整天都在谷歌上搜索,我很难过,所以任何建议都将不胜感激。

谢谢!

最佳答案

SQL 解决方案:

data product_20130603;
run;

data product_20130503;
run;

data product_20130703;
run;

%let campdate=20130601;

proc sql;
select min(memname) into :datasetname from dictionary.tables
where libname='WORK' and upcase(scan(memname,1,'_'))='PRODUCT' and
input(scan(memname,2,'_'),YYMMDD8.) ge input("&campdate.",YYMMDD8.);
quit;

现在你有 &datasetname 可以在 set 语句中使用,所以

数据 my_analysis;
设置 &datasetname;
(无论你在做什么);
跑;

将“WORK”修改为适当的库名,如果有任何其他限制,也添加这些限制。如果您有 product_somethingnotadate,您可能会收到一些关于无效日期的警告,但这无关紧要。

它的工作方式 - dictionary.tables 是您访问过的所有 libnames 中所有表的列表(与 sashelp.vtable 相同,但仅在 PROC SQL 中可用)。首先,这将选择名称的日期大于或等于您的广告系列结束日期的所有行;然后它需要 min(memname)从那。 memname当然是一个字符串,但是在除了数字以外都相同的字符串中,仍然可以使用 min并得到预期的结果。

关于macros - 在 SAS 中自动化表/对象名称扫描和搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18015218/

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