2014-09-20 633 views
1

我在sas中编写了下面的代码,但是我没有得到结果!在SAS中绘制直方图和箱线图

灰色结果直方图和数据范围不像我指定的那样!问题是什么?

我得到以下警告过:警告:中点=名单扩展以适应数据

什么颜色?

axis1 order=(0 to 100000 by 50000); 
axis2 order=(0 to 100 by 5); 
run; 
proc capability data=HW2 noprint; 
histogram Mvisits/midpoints=0 to 98000 by 10000 
haxis=axis1 
cfill=blue; 
run; 

enter image description here .......................................

我有同样的问题boxplot,例如我得到了以下情节,我想改变的距离,然后我可以看到更好的情节,但我不能。

enter image description here

+1

你有非常大的数值,这使得两条曲线无用的,如果你有兴趣的可视化数据在典型值附近的分布(例如,在直方图的情况下为0-3000)。无论如何,这个问题是无关紧要的,因为它是关于SAS编程的。 – chl 2014-09-20 19:02:00

+0

[绘制SAS中的直方图]的可能的副本(http://stackoverflow.com/questions/25944250/drawing-histogram-in-sas) – 2014-09-20 19:12:29

回答

2

下面是proc univariate而非proc capability,我没有获得SAS/QC测试,但用户指南显示直方图语句很相似的语法。希望你能翻译回来。

看起来您由于输出系统而出现颜色问题。您的图表可能通过ODS提供,在这种情况下,cfill选项不适用(请参阅here而不是传统图形标签)。

要更改ODS输出的柱状图的颜色,您可以使用proc template

proc template; 
    define style styles.testStyle; 
     parent = styles.htmlblue; 
     style GraphDataDefault/
      color = green; 
    end; 
run; 

ods listing style = styles.testStyle; 

proc univariate data = sashelp.cars; 
    histogram mpg_city; 
run; 

一个例子解释这个可以发现here

或者您可以使用proc sgplot创建具有颜色的更多控制的柱状图如下:

proc sgplot data = sashelp.cars; 
    histogram mpg_city/fillattrs = (color = red); 
run; 

至于你截断直方图的问题。忽略极端值并不是很有意义,因为它会给你一个错误的分布图像,这有点失败了直方图的目的。这就是说,你可以达到你所要求的与一个黑客位:

data tempData; 
    set sashelp.cars; 
    tempClass = 1; 
run; 

proc univariate data = tempData noprint; 
    class tempClass; 
    histogram mpg_city/maxnbin = 5 endpoints = 0 to 25 by 5; 
run; 

在一个虚拟的类tempClass上面创建,然后使用class声明要求比较直方图。 maxnbins将限制仅在比较直方图中显示的垃圾箱数量。

您的其他选择是在创建直方图之前排除(或限制)您的极值点,但这会导致略微错误的频率计数/百分比/酒吧高度。

data tempData; 
    set sashelp.cars; 
    mpg_city = min(mpg_city, 20); 
run; 

proc univariate data = tempData noprint; 
    histogram mpg_city/endpoints = 0 to 25 by 5; 
run; 

这是一个可行的方法,以原来的问题(未经测试,因为没有SAS/QC或数据):

proc capability data = HW2 noprint; 
    histogram Mvisits/
     midpoints = 0 to 300000 by 10000 
     noplot 
     outhistogram = histData; 
run; 
proc sgplot data = histData; 
    vbar _MIDPT_/
     response = _OBSPCT_ 
     fillattrs = (color = blue); 
    where _MIDPT_ <= 100000; 
run; 
+0

感谢您的回答:)顺便说一句,我怎样才能更改我的代码,使boxplot变得更清晰了?或者由于数据分布,boxplot非常不正常! – 2014-09-21 03:53:13

+0

我建议你转到文档以了解直方图语句,也许还要阅读ODS和proc sgplot,了解系统如何工作可能会为您节省时间。也就是说,我在上面添加了一个可能的方法;因为我没有SAS/QC或您的数据没有经过测试。 – SRSwift 2014-09-21 17:14:32