首页 > 解决方案 > 带有proc sql的R Markdown SAS代码块未按预期执行

问题描述

我正在使用 R Markdown 创建一个 SAS proc sql 教程,但我发现了几个实例,其中 proc sql 的代码块没有按预期工作。

首先, outobs=N 和 inobs=N 选项不会计算并导致此错误:

Error in engine(options) : Calls: <Anonymous> ... process_group.block -> call_block -> block_exec -> in_dir -> engine
In addition: Warning message: In system2(cmd, code, stdout=TRUE, stderr= TRUE, eng = options$engine.env): running command '"C:/Program Files/SASHome/SASFoundation/9.4/sas.exe" sas3afc64d1332b.sas -nosplash -ls 75' had status 1

接下来,匹配似乎在 proc sql 代码块中不起作用。我在 R Markdown 中尝试了子查询和完全连接但没有成功,而相同的代码在基本 SAS 中工作。

可重现的代码:

require(knitr)
require(SASmarkdown)
saspath <- "C:/Program Files/SASHome/SASFoundation/9.4/sas.exe"
sasopts <- "-nosplash -ls 75"

/*filter with a subquery*/
data roster;
    input Person $;
    datalines;
    Tiffany 
    Tiffany 
    Barbara
    Henry 
    Carol
    Jane 
    Tiffany 
    Ronald 
    Thomas
    William
    William
    Henry 
    Carol
    Carol
    Ronald 
    Thomas
;

proc sql;
title "Subquery";
    select *
    from sashelp.class
    where Name in 
        (select distinct Person
        from roster);
quit;

proc sql;
title "Full join";
     select *
     from sashelp.class a full join roster b
     on a.Name = b.Person;
quit;

对于上面的子查询,R Markdown 中的日志结果表明没有选择任何行。完全连接的结果是:

##            Name      Sex       Age    Height    Weight  Person
##            -----------------------------------------------------
##                                  .         .         .   Barbara
##                                  .         .         .   Carol  
##                                  .         .         .   Carol  
##                                  .         .         .   Carol  
##                                  .         .         .   Henry  
##                                  .         .         .   Henry  
##                                  .         .         .   Jane   
##                                  .         .         .   Ronald 
##                                  .         .         .   Ronald 
##                                  .         .         .   Thomas 
##                                  .         .         .   Thomas 
##                                  .         .         .   Tiffany
##                                  .         .         .   Tiffany
##                                  .         .         .   Tiffany
##                                  .         .         .   William
##                                  .         .         .   William
##            Alfred    M          14        69     112.5          
##            Alice     F          13      56.5        84          
##            Barbara   F          13      65.3        98          
##            Carol     F          14      62.8     102.5          
##            Henry     M          14      63.5     102.5          
##            James     M          12      57.3        83          
##            Jane      F          12      59.8      84.5          
##            Janet     F          15      62.5     112.5          
##            Jeffrey   M          13      62.5        84          
##            John      M          12        59      99.5          
##            Joyce     F          11      51.3      50.5          
##            Judy      F          14      64.3        90          
##            Louise    F          12      56.3        77          
##            Mary      F          15      66.5       112          
##            Philip    M          16        72       150          
##            Robert    M          12      64.8       128          
##            Ronald    M          15        67       133          
##            Thomas    M          11      57.5        85          
##            William   M          15      66.5       112

所以看起来 proc sql 只是不匹配 Name/Person 列?我已经尝试了 strip() 函数以确保空格不是问题。

同样,如果我在 SAS 中运行这些代码片段,则子查询和连接都可以正常工作。提前感谢您深入了解为什么此代码无法按预期工作!

标签: sasr-markdownproc-sql

解决方案


推荐阅读