SASmarkdown中的直方图未输出为PDF

SASmarkdown中的直方图未输出为PDF,sas,r-markdown,Sas,R Markdown,我正试图在一个正在编织成PDF的Rmarkdown文件中运行SASmarkdown。我可以得到打印出来的结果,如预期的那样显示出来,但是当我运行下面的代码时,它会在SAS中打开绘图,并且在我的PDF输出中没有任何内容。我似乎找不到一个办法来纠正这个问题 ```{r, engine='sas', engine.path=saspath, engine.opts=sasopts} /* check for outliers */ proc univariate data=capstone.bigbo

我正试图在一个正在编织成PDF的Rmarkdown文件中运行
SASmarkdown
。我可以得到打印出来的结果,如预期的那样显示出来,但是当我运行下面的代码时,它会在SAS中打开绘图,并且在我的PDF输出中没有任何内容。我似乎找不到一个办法来纠正这个问题

```{r, engine='sas', engine.path=saspath, engine.opts=sasopts}
/* check for outliers */
proc univariate data=capstone.bigbostonc noprint;
   title1;
    var tract lon lat crim zn indus chas nox rm age dis rad 
        tax ptratio b lstat bostontown;
    histogram;
run;
```

请注意,如果我将引擎更改为
'sashtml'
并编织为HTML,我将按预期获得绘图,而不是使用
engine='sas'
编织为PDF。

在PDF输出中看不到任何直方图的原因有两方面:

  • SASmarkdown仅支持列表和HTML输出(请参阅下面的参考资料)
  • proc univariate
    语句中使用
    noprint
    选项时 您正在删除SAS列表输出
  • 第(1)项来自包的扩展文档(包文档中引用的链接):

    其中显示(粗体,由我添加以突出相关要点):

    加载SASmarkdown包时,将定义并删除六个SAS引擎 随时可用。它们都运行您的SAS代码,但返回不同的输出 输入到您的文档中。这些是

    sas-返回您运行的sas代码和普通代码(“清单”) 输出

    saslog-返回SAS日志,而不是您的代码,并且 SAS输出

    sashtml-返回SAS代码和SAS HTML输出

    sashtmllog-返回SAS日志和SAS HTML输出

    sashtml5-返回SAS代码和带内联的SAS HTML输出 图形

    sashtml5log-返回SAS日志和SAS HTML输出

    至于(2),考虑到您无法将HTML输出发送到PDF文件,我想说,为了在PDF输出中包含某种类型的绘图以及变量的分布,您唯一的选择是在列表输出中生成绘图。在这种情况下,您将看到茎叶图而不是直方图

    您可以执行以下操作以实现此目标:

    • 使用语句
      ods graphics off禁用
      ods graphics
      ,
    • plots
      选项添加到
      proc univariate
      语句中
    此设置遵循
    PROC UNIVARIATE
    文档:

    绘图|绘图<()>生成 每个分析变量的绘图面板。如果启用ODS图形, 该面板包含水平直方图、方框图和法线 概率图。否则,程序将生成茎和叶 图(或水平条形图)、方框图和正态概率 使用行打印机输出打印

    我使用以下代码对此进行了测试,并按预期工作:

    library(knitr)
    library(rmarkdown)
    
    indoc <- '
    ---
    title: "Stem and leaf plot generated in LISTING output"
    output: pdf_document
    ---
    
    # Setup
    ```{r}
    library(SASmarkdown)
    sasexe <- "C:/Program Files/SASHome/SASFoundation/9.4/sas.exe"
    sasopts <- "-nosplash -ls 75"
    ```
    
    ```{r SteamAndLeafPlots, engine="sas", engine.path=sasexe, engine.opts=sasopts}
    ods graphics off;
    proc univariate data=sashelp.class plots;
      var age;
    run;
    ods graphics on;
    ```
    '
    
    knitr::knit(text=indoc, output="test.md")
    rmarkdown::render("test.md")
    
    库(knitr)
    图书馆(rmarkdown)
    
    indoc有没有一种方法可以让它只输出茎叶和/或盒状图?我不知道,我也不认为你会找到这样做的方法。事实上,这些图是遗留图(请参见此处:)。通常,要自定义SAS生成的输出,您需要修改输出所基于的模板(使用
    PROC template
    进行图形输出,使用
    PROC ODSTABLE
    进行ODS输出)。您可以通过运行
    ODS跟踪来确定要修改的模板在运行过程并从日志中获取这些名称之前。如果您尝试使用
    PROC UNIVARIATE
    运行,您会看到如下情况:这里我们看到,行打印机输出中负责茎叶等的“绘图”输出不会显示为模板,而是显示为“数据名”(检查行
    数据名:BatchOutput
    )。我不知道如何修改
    BatchOutput
    格式…谢谢。我能够实现另一项节省时间的工作。我只是有一大堆情节,不想对每一个都进行保存和插入。结果是,R Studio保存了当我编织到PDF时在SAS中弹出的绘图。然后可以根据需要设计一个
    \includegraphics
    标签。太棒了!你能用你的代码发布一个答案,让我们都能看到解决方案吗?也许您指的是
    include\u graphics()
    函数?(rdrr.io/cran/knitr/man/include_graphics.html)