Я использую 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
Далее, сопоставление не работает в кусках кода sql proc. Я пробовал подзапрос и полное соединение безуспешно в 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, подзапрос и соединение работают без проблем. Заранее благодарим за понимание того, почему этот код не работает должным образом!