【发布时间】:2015-10-14 19:53:01
【问题描述】:
%macro numstats(var = ,file=, format=);
data _null_;
z = find("&var.",'date');
call symput('myeval',z);
run;
%if &myeval. > 0 Or &var. = lpi %then %do;
Proc SQL;
create table &var as
select "&var." as Varname Length = 35, min(a.&var.) as Minimum FORMAT=&format., max(a.&var.) as Maximum FORMAT=&format.,
ROUND(avg(a.&var.),.01) as Mean, count(*) as Total_Count,x.Count_Null, y.Count_Zero
from &file. a
left join (select "&var." as Var, count(*) as Count_Null from &file.
where &var = .) x
on "&var." = x.var
left join (select "&var." as Var, count(&var.) as Count_Zero from &file.
where &var = 0) y
on "&var." = y.var
where &var. > 0
;
quit;
Data &var (rename=(MyNewVar = Minimum MyNewVar2 = Maximum));
Set &var;
MyNewVar = Put(Minimum,Date9.);
MyNewVar2 = Put(Maximum,Date9.);
*if MyNewVar < 0 then MyNewVar = "";
*if MyNewVar2 < 0 then MyNewVar2 = "";
drop Minimum Maximum;
*format myNewVar yymmddn8. myNewVar2 yymmddn8.;
run;
%end;
%else %do;
Proc SQL;
create table &var as
select "&var." as Varname Length = 35, min(a.&var.) as Minimum, max(a.&var.) as Maximum,
ROUND(avg(a.&var.),.01) as Mean, count(*) as Total_Count,x.Count_Null, y.Count_Zero
from &file. a
left join (select "&var." as Var, count(*) as Count_Null from &file.
where &var = .) x
on "&var." = x.var
left join (select "&var." as Var, count(&var.) as Count_Zero from &file.
where &var = 0) y
on "&var." = y.var
where &var. > 0
;
quit;
Data &var (rename=(MyNewVar = Minimum MyNewVar2 = Maximum));
Set &var;
MyNewVar = Put(Minimum,$12.);
MyNewVar2 = Put(Maximum,$12.);
if MyNewVar < 0 then MyNewVar = "";
if MyNewVar2 < 0 then MyNewVar2 = "";
drop Minimum Maximum;
run;
%end;
%mend numstats;
我有一个宏设置,它通过一个预定义的变量 (var) 并检查它是数字还是日期数字,然后相应地格式化使用 SQL 代码生成的统计信息。
代码运行正常。我的问题是数字变量需要一一调出。例如,
%numstats(var = originalprincipalbalance,file=work.filename);.
该文件有许多数字列,并且这些列会不时更改。有没有办法为它设置 SAS 来查找所有数字变量并通过这个宏运行它们,而无需我一个一个地调用它们?
我希望这会大大减少有人必须对每个文件中的所有变量进行错误检查,并确保它们都在自己的代码行上运行。另外,我必须有 70 多行代码,它们本质上是相同的,变量是唯一每次都会改变的东西。
请帮忙!提前谢谢你。
【问题讨论】:
-
SAS 非常擅长使用一个 PROC 分析许多变量。如果您要显示您的输入和所需的输出,我认为有人可以通过几个 PROC 步骤向您展示如何为数据集中的所有 _NUMERIC_ 变量执行您想要的操作,而无需按名称引用变量。
-
欢迎来到 Stack Overflow。我已经修复了第二个标记,它需要一个空行才能工作。很高兴你分享了你的代码。请分享您的输入和所需的输出。
标签: sas