こんにちは。
proc importで列の型式を文字に統一したため、mixed=YESを指定しているのですが、エラーが起きてしまいます。
使っているソフトはEnterprise Guide 7.15なのですがこちらだと使えないのでしょうか?
エラー内容としては以下です。
ERROR 180-322: ステートメントが有効でないか、適切な順序で使用されていません。
ソースコード
%let workdir = %sysfunc(getoption(work));
/* --------------------------------- */
data _null_;
length fname $300 ;
/* ワイルドカードで指定したファイルのうち、先頭の1つを取得する。 */
/* infile "&workdir/(探したいファイル名)" filename=fname; */
infile "&workdir/JTY.xlsx" filename=fname;
input @;
call symputx('fname',fname);
stop;
run;
proc import
file="&fname"
/* 出力先のデータセット名を指定。複数取り込む場合以外はそのままでもOK */
out=work.IMPORT_FILE
/* Excelの場合。CSVも取り込み可能だが構文が少し違うので注意(省略) */
dbms=xlsx
replace;
/* 取り込む範囲を指定 */
range="A1:S2000";
/* 取り込むシート名を指定 */
sheet="sheet1";
GETNAMES=YES;
mixed=yes
run;
おそらく出ているエラー自体は
mixed=yes
run;
の部分でyesの後に[;]が抜けているからだと思います
ただmixedオプションは,dbms=xlsxかつ64bit環境下でエラーになるという事象もあったかと思うので,一度お確かめくださいです
申し訳ないです.情けない限りですが,現状の私の知識だと,文字型を強制してのEXCEL読み込みはDDEぐらいしか思い浮かばず, EGから通るのかちょっとわからかなったです.
古い時代の日本のサポートページだと,CSVにしてから読み込めば回避可能ですとかって,突っ込みどころの多い解説があったり..
https://www.sas.com/offices/asiapacific/japan/service/technical/faq/list/body/access014.html
SAS Baseの方のメンテナンスリリースのM7とかであればFCMPでPyhonコード使えるので,もしかしたらそっこからExcel操作をかましてどうにかなるのかもですが,ちょっと未検証なのと,やはりEGの方でどうなのかわからず…
すみません,他の方の回答待ちです…
dbms=EXCEL とすれば、mixedオプションが有効になると思います。
https://go.documentation.sas.com/doc/ja/pgmsascdc/9.4_3.5/acpcref/n0msy4hy1so0ren1acm90iijxn8j.htm
参考までに、mixedオプションは、型判定に使われるオブザベーション(最初の何行か)のなかに数値と文字列が混在していた場合に文字列変数になるもので、その最初の何行かに文字が含まれていなければ数値変数になります。私の環境では最初の8オブザベーションで判定するようで、8行目まで数値で9行目に文字列がある場合は数値変数と判定され、9行目は欠損となります。
ちなみに、別のコミュニティでは、getnames=No にして変数名の行から読めばすべて文字列変数になる、というあまりスマートではない解決法も提案されています。
(上記リンク先では dbdsopts オプションで変数ごとの型指定をする方法も提案されていますが、私の環境では再現できず...。よければ試してみてください。)
Don’t miss the livestream kicking off May 7. It’s free. It’s easy. And it’s the best seat in the house.
Join us virtually with our complimentary SAS Innovate Digital Pass. Watch live or on-demand in multiple languages, with translations available to help you get the most out of every session.