【问题标题】:Using Proc sql to get statiscs for many variables使用 Proc sql 获取许多变量的统计信息
【发布时间】:2018-10-17 03:49:24
【问题描述】:

我想使用 Porc sql 创建一个数据集,其中包含一些统计信息,例如大量变量的最小值和最大值。下面的代码只返回第一个变量的 min 和 max 的数据集,其余变量 min 和 max 不显示在数据集中。

  proc sql;
  CREATE TABLE Lib.VarNum AS 
  %do i=1 %to &nvars;
  select  min(%SCAN(&numvar,&i)) as Min%SCAN(&numvar,&i),
     max(%SCAN(&numvar,&i)) as Max%SCAN(&numvar,&i)
  from &data (keep= _numeric_);
  %end;
  quit;

有人可以帮助我吗?

【问题讨论】:

  • 对于无效的代码,您确实需要提供完整的代码以及无效的解释。但是,一般来说,PROC MEANS 的速度要快得多。

标签: sas proc-sql


【解决方案1】:

使用 proc 方法是最好的方法。

  proc means data=sashelp.cars noprint;
 var _numeric_;
 output out=want (drop= _type_ _freq_ )min(_numeric_) =
 max(_numeric_) =/autoname;
 run;

但如果您想通过 Proc SQL 最简单地从 dictionary.columns 中获取宏变量并在您的表中使用它们。

 /* creating macrovariables using dictionary.columns*/
 proc sql noprint;
select 'min('|| trim(name)||') as min_'||name,
   'max('|| trim(name)||') as max_'||name 
   into :min separated by ',' , :max separated by ','
from dictionary.columns
where libname ='SASHELP'
and memname ='CARS'
and upcase(type) ='NUM';

可以检查宏变量的值,并且只显示部分

 %put &min;
  min(MSRP) as min_MSRP,min(Invoice) as min_Invoice,min(EngineSize) as min_EngineSize

在proc sql语句中使用这个宏变量如下所示。

proc sql;
create table want as 
select &min, &max from sashelp.cars;

【讨论】:

  • 谢谢,我会用 proc 方法来做的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多