我对SAS Macro有疑问(我在R和python中做分析,没有SAS)。因此,在解决以下问题时,我对SAS的语法缺乏了解。
编写一个接受表名,列名,整数列表,主轴标签和x轴标签的宏。此函数应扫描整数列表中的每个元素,并为每个整数值生成直方图,将bin计数设置为输入列表中的元素,并使用指定的参数标记main和x轴。您应该将y轴标记为Frequency,bin =和bin的数量。
此外,我需要使用数据集测试宏,使用bin号码12,36和60.所以,我可以用类似
的方式调用宏%plot_histograms(data, y, 12 36 60, main="Title", xlabel="x_label");
to plot three different histograms of the data set.
提示:假设12 36 60解析为单个宏参数并使用%scan,宏定义可能看起来像
%macro plot_histograms(table_name, column_name, number_of_bins, main="Main", xlabel="X Label")
先谢谢。
答案 0 :(得分:1)
首先,你真的应该自己尝试一下,让我们知道你被困在哪里。
那就是说,让我们分解如何解决这个问题。
制作一些测试数据;
data test;
do i=1 to 10000;
r = rannor(1);
output;
end;
run;
如何使用此方法创建直方图?使用PROC SGPLOT
proc sgplot data=test;
histogram r / nbins=10;
xaxis label="X LABEL";
yaxis label="Y LABEL";
run;
所以,如果我创建一个宏来创建它:
%macro histogram(data,column,bin,xlabel,ylabel);
proc sgplot data=&data;
histogram &column / nbins=&bin;
xaxis label="&xlabel";
yaxis label="&ylabel";
run;
%mend;
现在%histogram(test,r,10,X LABEL,Y LABEL)'
生成相同的图像。
让我们写一些循环于二进制值的东西并调用这个宏:
%macro make_histograms(data,column,bins,xlabel,ylabel);
%local i n bin;
%let n=%sysfunc(countw(&bins)); /*Number of words in &bins*/
%do i=1 %to &n;
%let bin=%scan(&bins,&i); /*Get the nth bin*/
%histogram(&data,&column,&bin,&xlabel,&ylabel);
%end;
%mend;
答案 1 :(得分:0)
我不完全理解您的问题,但这不是一个免费的代码平台,但这应该指向正确的方向
%macro plot_histograms(table_name, column_name, number_of_bins, main="Main", xlabel="X Label");
%do i=1 %to %sysfunc(countw(&number_of_bins.); /* loop accross elements in your input list */
proc gchart data=&table_name.; /*make a chart for the provided table */
...
/* whatever it is you actually need to do, fetch the current element of the input list like this */
%scan(&number_of_bins.,&i.)
...
run;
%end;
%mend;