WWWのCGIによるSASの利用

[OS]
[リリース]
[キーワード] Internet

[質問]

WWWのCGI(Common Gateway Interface) を使用して、SASでの分析結果等をブラウザに表示させたいのですが可能でしょうか。

[回答]

SASをバッチ実行させ、その結果をブラウザに表示させることが可能です。

以下に perlと呼ばれる言語を使って、ユーザの選択に応じてSASプログラムを起動させるサンプルプログラムを示します。 (本プログラムに関するお問い合わせはご遠慮ください)

 #!/usr/local/bin/perl
 #
 # 指定されたSASデータセットを表示する
 #
 $sas = "/xxxxx/sasprog.sas";
 $lst = "/xxxxx/sasprog.lst";
 $log = "/xxxxx/sasprog.log";
 $memlist = "/xxxxx/memlist.lst" ;

 open ( SASPROG, ">" $sas );
 print SASPROG "libname s '/xxxxxx/sasuser';\n";
 print SASPROG "data _null_;\n";
 print SASPROG "   file $memlist;\n";
 print SASPROG "   set sashelp.vmember;\n";
 print SASPROG "   if LIBNAME='S' and MEMTYPE='DATA';\n";
 print SASPROG "   DSN = trim( LIBNAME ) || '.' || MEMNAME;\n";
 print SASPROG "   put DSN;\n";
 print SASPROG "run;\n";
 close (SASPROG );

 `/usr/local/bin/sas $sas -print $lst -log $log -filelocks no`;

 print "Content-type: text/html\n\n";

 print "<HEAD>\n<TITLE>CGI Interface to SAS<TITLE>\n</HEAD>n";
 print "<BODY>\n<H1>SASとのインタフェース<H1>\n";

 print "内容を表示したいSASデータセットの名前を選択して実行ボタンを押してくださ
い。\n";
 print "<hr>\n\n";

 print '<FORM METHOD="POST" ACTION="http://xxxxxxxx/test2.cgi">', "\n";
 print '<select name="dsn">',"\n";

 open ( SASOUT, $memlist );
 while ( <SASOUT> )
 {
     print "<option> $_";
 }

 print '<select><p>,"\n";

 print '<INPUT TYPE="submit" VALUE="実行">',"\n";
 print "<form>n<br>\n";


 print "<hr><address>";
 print "This page is generated by perl script and results shown above is";
 print " generated by the SAS system which are executed on ";
 print `date;`, " by ", `whoami`;
 print "<address><html>\n";


 #unlink( $sas );
 #unlink( $lst );
 #unlink( $log );
 #unlink( $memlist );

===============================test2.cgi:

#!/usr/local/bin/perl
#
# 指定されたSASデータセットを表示する
#

read( STDIN, $buffer, $ENV{ 'CONTENT_LENGTH' } );
@parm = split( /&/, $buffer );

$n = 0;
foreach( @parm )
{
    $n ++;
    $parm[0] =~ /([^=]+)=([^=]+)/;
    $ENV "NAME"  . $n  = $1;
    $ENV "VALUE" . $n  = $2;
}

$ENV "NPARM"  = $n;

print "Content-type: text/html\n\n";

$sas = "/xxxxxxxx/sasprog.sas";
$lst = "/xxxxxxxx/sasprog.lst";
$log = "/xxxxxxxx/sasprog.log";

open ( SASPROG, ">" $sas );
print SASPROG "libname s '/xxxxxxxx/sasuser';\n";
print SASPROG "%let dsn=%sysget(VALUE1); %put &dsn;\n";
print SASPROG "options ls=72 ps=60; proc print data=&dsn;run;\n";
close (SASPROG );

`/usr/local/bin/sas $sas -print $lst -log $log -filelocks none`;

print "<html>i<title>Sample output from SAS<title>

print "<h1>SASプログラムの実行結果<h1>n\n";

print "<pre>\n";


open ( SASOUT, $lst );
while ( <SASOUT> )
{
   print $_;
}

print "<pre>\n";

print "<hr><address>";
print "This page is generated by perl script and results shown above is";
print " generated by the SAS system which are executed on ";
print `date;`, " by ", `whoami`;
print "<address>lt;html>\n";

unlink( $sas );
unlink( $lst );
unlink( $log );

[参考]

  • SUGI-J'96/IDS Conference'96 論文集