Просто выровняйте правильные типы данных, так как subject - это символьный столбец (с предшествующими нулями), а не числовой.Кроме того, исправьте псевдонимы с помощью s2.SiteId, s2.RecordId
в SELECT
предложении.
proc sql;
/*
* Create table and add
*/
CREATE TABLE output (
subject varchar(3),
SiteId int,
RecordId int
);
INSERT INTO output
SELECT distinct s1.subject, s2.SiteId, s2.ReferenceId
FROM Excel_Sheet1 as s1
FULL OUTER JOIN Excel_Sheet2 as s2
ON s1.subject = s2.subject
WHERE s2.SiteId is Null;
quit;
В качестве альтернативы используйте синтаксис CREATE TABLE ... AS
и задайте типы столбцов, определенные в запросе:
proc sql;
CREATE TABLE output as
SELECT distinct s1.subject, s2.SiteId, s2.ReferenceId
FROM Excel_Sheet1 as s1
FULL OUTER JOIN Excel_Sheet2 as s2
ON s1.subject = s2.subject
WHERE s2.SiteId is Null;
quit;
И альтернативыIS NULL
:
WHERE s2.SiteId is missing;
WHERE s2.SiteId = .;
Данные
data Excel_Sheet1;
infile datalines delimiter=',' DSD;
length subject $ 3;
length T_F $ 1;
input subject $ T_F $;
datalines;
001,T
002,F
;
data Excel_Sheet2;
infile datalines delimiter=',' DSD;
length subject $ 3;
input subject $ SiteId ReferenceId;
datalines;
001,,55
002,44,66
;
Вывод
proc print data = Output; run;
Obs subject Id Id;
1 001 . 55;
Сейчас, если вы хотите вывод макропеременной (не таблицы), используйте предложение INTO :
proc sql;
SELECT distinct s2.ReferenceId
INTO :output
FROM Excel_Sheet1 as s1
FULL OUTER JOIN Excel_Sheet2 as s2
ON s1.subject = s2.subject
WHERE s2.SiteId = .; *is missing;
quit;
%put &output.;
55