如何从 'Out=' 选项创建 SAS 数据视图?
How do I create a SAS data view from an 'Out=' option?
我在 SAS Enterprise Guide 中有一个流程,主要由数据视图组成,而不是 tables,以便在工作库中存储。
问题是我需要从其中一个数据视图计算百分位数(使用 proc univariate)并将其左连接到最终 table(如我的流程屏幕截图所示)。
有什么方法可以将单变量过程中的输出文件指定为数据视图,以便该过程不会在流程中计算它之前的所有内容?当百分位数与最后的 table 相连时,流量会再次计算,因此我实际上将处理时间加倍了。
请在下面找到单变量过程的代码
proc univariate data=WORK.QUERY_FOR_SGFIX noprint;
var CSA_Price;
by product_id;
output out= work.CSA_Percentiles_Prod
pctlpre= P
pctlpts= 40 to 60 by 10;
run;
在 SAS 中,我的理解是像 proc univariate
这样的过程通常不能产生视图作为输出。我能想到的唯一解决方法是让您在数据步骤中复制 proc 逻辑并从数据步骤生成视图。你可以这样做,例如通过将变量转置为临时数组并使用 pctl 函数。
这是一个简单的例子:
data example /view = example;
array _height[19]; /*Number of rows in sashelp.class dataset*/
/*Populate array*/
do _n_ = 1 by 1 until(eof);
set sashelp.class end = eof;
_height[_n_] = height;
end;
/*Calculate quantiles*/
array quantiles[3] q40 q50 q60;
array points[3] (40 50 60);
do i = 1 to 3;
quantiles[i] = pctl(points[i], of _height{*});
end;
/*Keep only the quantiles we calculated*/
keep q40--q60;
run;
通过更多的工作,您还可以使这种方法按组对个人进行 return 个百分位数,而不是一次对整个数据集进行处理。您需要编写一个双 DOW 循环来执行此操作,例如:
data example;
array _height[19];
array quantiles[3] q40 q50 q60;
array points[3] _temporary_ (40 50 60);
/*Clear heights array between by groups*/
call missing(of _height[*]);
/*Populate heights array*/
do _n_ = 1 by 1 until(last.sex);
set class end = eof;
by sex;
_height[_n_] = height;
end;
/*Calculate quantiles*/
do i = 1 to 3;
quantiles[i] = pctl(points[i], of _height{*});
end;
/* Output all rows from input dataset, with by-group quantiles attached*/
do _n_ = 1 to _n_;
set class;
output;
end;
keep name sex q40--q60;
run;
我在 SAS Enterprise Guide 中有一个流程,主要由数据视图组成,而不是 tables,以便在工作库中存储。
问题是我需要从其中一个数据视图计算百分位数(使用 proc univariate)并将其左连接到最终 table(如我的流程屏幕截图所示)。
有什么方法可以将单变量过程中的输出文件指定为数据视图,以便该过程不会在流程中计算它之前的所有内容?当百分位数与最后的 table 相连时,流量会再次计算,因此我实际上将处理时间加倍了。
请在下面找到单变量过程的代码
proc univariate data=WORK.QUERY_FOR_SGFIX noprint;
var CSA_Price;
by product_id;
output out= work.CSA_Percentiles_Prod
pctlpre= P
pctlpts= 40 to 60 by 10;
run;
在 SAS 中,我的理解是像 proc univariate
这样的过程通常不能产生视图作为输出。我能想到的唯一解决方法是让您在数据步骤中复制 proc 逻辑并从数据步骤生成视图。你可以这样做,例如通过将变量转置为临时数组并使用 pctl 函数。
这是一个简单的例子:
data example /view = example;
array _height[19]; /*Number of rows in sashelp.class dataset*/
/*Populate array*/
do _n_ = 1 by 1 until(eof);
set sashelp.class end = eof;
_height[_n_] = height;
end;
/*Calculate quantiles*/
array quantiles[3] q40 q50 q60;
array points[3] (40 50 60);
do i = 1 to 3;
quantiles[i] = pctl(points[i], of _height{*});
end;
/*Keep only the quantiles we calculated*/
keep q40--q60;
run;
通过更多的工作,您还可以使这种方法按组对个人进行 return 个百分位数,而不是一次对整个数据集进行处理。您需要编写一个双 DOW 循环来执行此操作,例如:
data example;
array _height[19];
array quantiles[3] q40 q50 q60;
array points[3] _temporary_ (40 50 60);
/*Clear heights array between by groups*/
call missing(of _height[*]);
/*Populate heights array*/
do _n_ = 1 by 1 until(last.sex);
set class end = eof;
by sex;
_height[_n_] = height;
end;
/*Calculate quantiles*/
do i = 1 to 3;
quantiles[i] = pctl(points[i], of _height{*});
end;
/* Output all rows from input dataset, with by-group quantiles attached*/
do _n_ = 1 to _n_;
set class;
output;
end;
keep name sex q40--q60;
run;