sas:proc sql select into具有多个输出

sas:proc sql select into具有多个输出,sas,select-into,Sas,Select Into,我有以下数据集 data height; input name $ var $ value; datalines; John test1 175 Peter test1 180 Chris test1 140 John test2 178 Peter test2 182 Chris test2 148 ; run; 我想对每个学生进行两次测试的平均值 我可以通过以下方法创建一个名为mean_v_John的新变量 proc sql; select mean(value)

我有以下数据集

data height;
    input name $ var $ value;
    datalines;
John test1 175
Peter test1 180
Chris test1 140
John test2 178
Peter test2 182
Chris test2 148
;
run;
我想对每个学生进行两次测试的平均值

我可以通过以下方法创建一个名为mean_v_John的新变量

proc sql;
    select mean(value) into: mean_v_John
    from height
    where name = 'John';
quit;

%put &mean_v_John.;
输出:

2216  %put &mean_v_John.;
176.5

问题:如何自动检测有多少学生,并使用&mean\u v\u名称创建变量?在本例中,将有3个变量。

如果您开始计算每个学生的平均值,您可以使用该表分配宏变量和。比如:


如果您从计算每个学生的平均值开始,您可以使用该表来分配宏变量。比如:


虽然不可能在SAS中完全按照您的意愿直接执行此操作(很大程度上是因为这在SAS中不是惯用的操作),但您可以在一个步骤中完成相对接近的操作

如果不使用实际名称,而是使用增量数字,则可以在宏变量伪数组中获得相同的基本结果。见下文:

proc sql;
  select age, mean(height) into :age1-:age8, :height1-:height8
  from sashelp.class
  group by age;
quit;

%put _global_;
现在有两种向量/数组,一种存储年龄,另一种存储相应的平均高度。你也可以用你的名字


宏变量伪数组并不是一种语言结构,但是,它们有点像是被希望以这种方式使用它们的人支持的东西;因此,有很多文章介绍如何将它们用于各种不同的自定义宏实现(谷歌“SAS宏阵列”,然后选择您最喜欢的实现)。

虽然不可能直接在SAS中完全按照您的意愿来实现这一点(很大程度上是因为这在SAS中不是惯用的方法),您可以在一个步骤中完成一些相对接近的操作

如果不使用实际名称,而是使用增量数字,则可以在宏变量伪数组中获得相同的基本结果。见下文:

proc sql;
  select age, mean(height) into :age1-:age8, :height1-:height8
  from sashelp.class
  group by age;
quit;

%put _global_;
现在有两种向量/数组,一种存储年龄,另一种存储相应的平均高度。你也可以用你的名字


宏变量伪数组并不是一种语言结构,但是,它们有点像是被希望以这种方式使用它们的人支持的东西;因此,有很多文章介绍如何将它们用于各种不同的自定义宏实现(谷歌“SAS宏阵列”,然后选择您最喜欢的实现)。

是的。另外,我想把它作为一个变量,以便进一步使用。因为我不太熟悉sas。请告诉我更好的解决方案。这真的不是很SAS-y;通常,您只需创建一个数据集,然后将该数据集用于将来的使用。宏变量与R变量不同——它们通常不是您输入数据的对象。SAS使用的数据集(即R数据帧)几乎完全用于数据。虽然你在技术上可以做到这一点,但我怀疑从长远来看,你试图对宏变量做什么会有用。是的。另外,我想把它作为一个变量,以便进一步使用。因为我不太熟悉sas。请告诉我更好的解决方案。这真的不是很SAS-y;通常,您只需创建一个数据集,然后将该数据集用于将来的使用。宏变量与R变量不同——它们通常不是您输入数据的对象。SAS使用的数据集(即R数据帧)几乎完全用于数据。尽管你在技术上可以做到这一点,但我怀疑从长远来看,你试图用宏变量做什么会有用。