2017-08-03 97 views
-3

我对SAS宏有问题(我在R和python中进行分析,没有SAS)。所以,在解决以下问题时,它让我对SAS的语法缺乏了解。SAS:写一个宏...

编写一个接受表名,列名,整数列表,主轴标签和x轴标签的宏。此函数应该扫描整数列表中的每个元素,并为每个整数值生成直方图,将bin计数设置为输入列表中的元素,并用指定的参数标记main和x轴。您应该标记y轴以读取频率,分箱数和分箱数。

此外,我需要测试宏使用的数据集,利用区号码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解析为单个宏参数并使用%扫描,宏定义可以看起来像

%macro plot_histograms(table_name, column_name, number_of_bins, main="Main", xlabel="X Label") 

在此先感谢。

+0

请解释什么是“本”是什么? – user2877959

+0

直方图中的容器对应于条形。他们被称为垃圾箱,因为你想象某人根据你正在做柱状图的任何属性将[物品]分类到垃圾箱。 – Joe

+0

直方图中的箱数。它会自动将它们转换为整数列表的大小。 –

回答

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; 
1

首先,你真的应该试试这个你自己,让我们知道你卡在哪里。

这就是说,让我们分解如何解决这个问题。

做一些测试数据;

data test; 
do i=1 to 10000; 
    r = rannor(1); 
    output; 
end; 
run; 

如何用此创建直方图?所以 enter image description here

,如果我做一个宏通常会产生这样的::使用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;