如何跨SAS中的多个变量形成相同的数据步骤?

如何跨SAS中的多个变量形成相同的数据步骤?,sas,datastep,Sas,Datastep,我有这样的数据,有500个变量和一个目标: var1 var2 var3 var4 ... var500 target 这些变量的名称不是按上述顺序排列的,因此我认为不能使用类似var1:var500的名称。我想通过循环变量来创建图形。有些变量是连续的,有些是标称的 for var1 through var500 if nominal then create graphtypeA var[i] * target else if continous then create grap

我有这样的数据,有500个变量和一个目标:

var1 var2 var3 var4 ... var500  target
这些变量的名称不是按上述顺序排列的,因此我认为不能使用类似
var1:var500
的名称。我想通过循环变量来创建图形。有些变量是连续的,有些是标称的

for var1 through var500
   if nominal then create graphtypeA var[i] * target
   else if continous then create graphtypeB var[i] * target
end;
我可以轻松创建第二个表,其中包含要检查的数据类型。数组似乎有助于完成变量循环的任务。比如:

data work.mydata;
   set archive.mydata;
   array myarray{501]  myarray1 - myarray501
   do i=1 to 500;
     proc sgpanel;
     panelby myarray[501];
     histogram myarray[i];
   end;     
run;

但这不起作用,也不检查它是什么类型的变量。如果我们假设我有另一个sas.dataset,它有varname和vartype(连续的,标称的),我如何循环为给定的vartype创建所需的图?提前感谢。

不幸的是,不可能按照您在这里提出的方式在数据步骤之外使用数组,至少不可能以任何非常有效的方式。但是,您有很多选择。一种方法是只调用一次graphing proc,让它对数据集中的每个数字变量进行图形化,例如:

proc univariate data = sashelp.class;
    var _NUMERIC_;
    histogram;
run;
如果要绘制相同类型的变量在数据集的列顺序中相邻,则可以使用双破折号列表,例如

proc univariate data = sashelp.class;
    var age--weight;
    histogram;
run;

一般来说,您应该避免为每个变量分别调用proc或运行数据步骤-只调用一次并一次性处理所有内容几乎总是更有效。

基本上,您需要循环一些变量,应用一些逻辑来确定变量类型,然后根据变量类型生成输出。虽然有很多方法可以解决这个问题,但一种解决方案是将变量选择到宏变量中,循环遍历变量的“列表”(不是正式的数据结构),并使用宏控制逻辑为数值变量和字符变量指定不同的子例程

* get some data;

data set1 (keep = Make Type Origin Horsepower Cylinders);
 set sashelp.cars;
run;

* create dataset of variable names and types;

proc contents data = set1
out = vars
noprint;
run;

* get variable names and variable types (1=numeric, 2=character)
* into two macro variable "lists" where each entry is seperated
* by a space;

proc sql noprint;
select  name, type
into :varname separated by ' ', :vartype separated by ' '
from vars
where name <> "Make";
quit; 

* put the macro variables to the log to confirm they are what
* you expect

%put &varname;
%put &vartype;
我将使用sashelp.cars数据集来说明。在本例中,变量原点是“目标”变量,变量Make、Type、Horsepower和Cylinder是数字和字符变量

* get some data;

data set1 (keep = Make Type Origin Horsepower Cylinders);
 set sashelp.cars;
run;

* create dataset of variable names and types;

proc contents data = set1
out = vars
noprint;
run;

* get variable names and variable types (1=numeric, 2=character)
* into two macro variable "lists" where each entry is seperated
* by a space;

proc sql noprint;
select  name, type
into :varname separated by ' ', :vartype separated by ' '
from vars
where name <> "Make";
quit; 

* put the macro variables to the log to confirm they are what
* you expect

%put &varname;
%put &vartype;

您想要500个单独的SGPlot,还是一个plot中有500个?单独的plot。做二元分析。我现在没有时间回答问题——但看看“数据驱动编程”,这就是你想要做的。如果没有其他人回答,将在稍后完全回答。它似乎运行正确。。。但图形不会打印到ods图形设备。我正在打印到pdf,但没有打印任何内容。我应该将ods图形选项放在哪里才能将输出打印到pdf?ods选项可以添加到宏的内部或外部。要生成单个文件,请添加
ods pdf file=“filepath\filename.pdf”
%宏绘图仪后的行和〈代码〉ods pdf关闭
%mend plotter
之前的一行,这是我使用它的地方,但我在其中有另一个打字错误。然而,这个代码就像一个符咒。。。。谢谢