检查sas的外部excel数据集中是不是存在一行
Posted
技术标签:
【中文标题】检查sas的外部excel数据集中是不是存在一行【英文标题】:Check if a row exists in an external excel dataset in sas检查sas的外部excel数据集中是否存在一行 【发布时间】:2021-12-28 08:05:58 【问题描述】:大家早上好,
我是 sas 的新手。我有一个 excel(例如 sales),其中每天插入一行(例如每天的销售额),我想做的是在 sas 中运行一个宏,如果在 excel 中称为 sales,我没有例如,我将前一天的任何记录放在另一个名为 check sales 的表中。
总之,我希望宏对 excel 数据集进行检查,如果没有昨天日期的记录做 x 事情(在另一个表的列中插入 KO),如果有昨天的记录,继续
这是我尝试过的。我想看看在名为“DQ_Diario”的 excel 中是否有昨天的记录
%macro Macro_existe2;
%let myfiledq= /opt/sas/dfg/dfgd/dfgd/fgdgfd/DQ_DIARIO.xlsx;
%put &myfiledq;
%IF (%sysfunc(fileexist(&myfiledq))) and &vweek ne &weekfin %then %do;
%put REVISAR: existe el fichero de &vday. y es una semana entregada;
%end;
%end;
%mend Macro_existe2;
%Macro_existe2;
应该注意,函数中缺少 else 部分,但现在我很想知道如何检查 excel 数据集中是否有昨天的记录(昨天我将它定义为宏变量所以与 & 昨天。这将是有效的)
到目前为止,我所做的是它会检查文件是否存在于某个路径中,但我现在需要检查文件中是否存在记录。
我希望我已经解释清楚了,非常感谢每一位阅读这篇文章的人。圣诞快乐
【问题讨论】:
【参考方案1】:您需要将 XLSX 文件转换为数据集才能检查内容。所以你的宏必须生成 SAS 代码。
您知道要检查的工作簿中工作表的工作表名称吗?如果不是,PROC IMPORT 将只导入第一张表,无论其名称如何。
数据是否为矩形格式,以便轻松转换为数据集?还是您只想转换 KO 列。 KO 是列标题还是 Excel 列引用?如果是这样,您的工作表中真的有那么多列吗?您可以使用 PROC IMPORT 的 RANGE 选项仅导入特定的单元格。
让我们通过假设您要检查上一个日期的列标记为 DATE 来简化示例,因此将转换为名为 DATE 的变量。
%macro check_xlsx_date(filename,mvar=found);
%if not %sysmexist(&mvar) %then %global &mvar;
%let &mvar=0;
%if %sysfunc(fileexist(&filename)) %then %do;
proc import datafile="&filename" dbms=xlsx out=excel_sheet replace ;
run;
proc sql noprint;
select max( date = (today()-1) ) into :&mvar trimmed
from excel_sheet
;
quit;
%end;
%mend check_xlsx_date;
%check_xlsx_date(/opt/sas/dfg/dfgd/dfgd/fgdgfd/DQ_DIARIO.xlsx);
%put &=found;
【讨论】:
以上是关于检查sas的外部excel数据集中是不是存在一行的主要内容,如果未能解决你的问题,请参考以下文章
急求!!!我用SAS导入数据的时候 老是出现文件不存在的错误 这是为啥呢?