检查 sas 中的外部 excel 数据集中是否存在一行
Check if a row exists in an external excel dataset in sas
大家早上好,
我是 sas 新手。我有一个 excel(例如销售额),其中每天插入一行(例如每天的销售额),我想做的是 运行 sas 中的一个宏,如果在excel叫sales,我没有前一天的记录,我在另一个叫check sales的table里打了个KO,比如
总而言之,我希望宏对 excel 数据集进行检查,如果没有包含昨天日期的记录,则执行 x 操作(在另一个 table 的列中插入一个 KO ) 如果有昨天的记录,继续
这是我试过的。我想看看 excel 中是否有昨天的记录 'DQ_Diario'
%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 数据集中是否有昨天的记录(昨天我有它定义为宏变量,所以昨天用 & 定义。这将是有效的)
到目前为止我的实现是它帮我检查某个路径下是否存在文件,但我现在需要的是检查文件中是否存在记录。
我希望我已经解释清楚了,非常感谢阅读这篇文章的每个人post。圣诞快乐
您需要将 XLSX 文件转换为数据集才能检查内容。因此您的宏将必须生成 SAS 代码。
您知道您要检查的工作簿中sheet作品的sheet名称吗?如果不是,PROC IMPORT 将只导入第一个 sheet,无论其名称如何。
数据是否采用矩形格式,以便轻松转换为数据集?或者您只想转换 KO 列。 KO 是 header 列还是 Excel 列引用?如果是这样,您的作品中真的有那么多专栏吗sheet?您可以使用 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 中的一个宏,如果在excel叫sales,我没有前一天的记录,我在另一个叫check sales的table里打了个KO,比如
总而言之,我希望宏对 excel 数据集进行检查,如果没有包含昨天日期的记录,则执行 x 操作(在另一个 table 的列中插入一个 KO ) 如果有昨天的记录,继续
这是我试过的。我想看看 excel 中是否有昨天的记录 'DQ_Diario'
%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 数据集中是否有昨天的记录(昨天我有它定义为宏变量,所以昨天用 & 定义。这将是有效的)
到目前为止我的实现是它帮我检查某个路径下是否存在文件,但我现在需要的是检查文件中是否存在记录。
我希望我已经解释清楚了,非常感谢阅读这篇文章的每个人post。圣诞快乐
您需要将 XLSX 文件转换为数据集才能检查内容。因此您的宏将必须生成 SAS 代码。
您知道您要检查的工作簿中sheet作品的sheet名称吗?如果不是,PROC IMPORT 将只导入第一个 sheet,无论其名称如何。
数据是否采用矩形格式,以便轻松转换为数据集?或者您只想转换 KO 列。 KO 是 header 列还是 Excel 列引用?如果是这样,您的作品中真的有那么多专栏吗sheet?您可以使用 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;