Title
パソコンでのアンケート・データ分析の事例研究(下)−
クロス集計の自動化の試み−
Author(s)
阿部, 亮一
Citation
沖大経済論叢 = OKIDAI KEIZAI RONSO, 12(2): 1-37
Issue Date
1988-03-31
URL
http://hdl.handle.net/20.500.12001/6765
パソコンでのアンケート・データ分析の事例研究(下)
-クロス集計の自動化の試み- 阿部亮 【前号】 はじめに I分析の方法 l分析の手段 2分析の対象と具体的方法 33次元クロス集計プログラムの概要 Ⅱプログラム前半の内容と実行結果 1Mainroutin6部 2原データ転送部 3項目指定部 4集計部 5集計結果記録部 6結果読み出し部 【以下本号】 Ⅱ補足 Ⅲプログラム後半の内容と実行結果 1表示、主要部 2クロス集計表 2.11行表示 2.22行表示 3棒グラフ表示 4原データ表示 5割り込み処理 Ⅳ成果と残された課題 1〔承前〕との(下)では、(上)で算出、記録した3次元までのクロス集計結
果や原データを表やグラフで表示する部分の内容説明と実行結果の例示をおこな
う。 Ⅱ補足前号掲載の前編〔文献9〕では、プログラムの説明に終始し、実行時のCRT
画面を例示しなかった。これは実行の各段階を連続して示さなければ理解しにくいためで、前段が終ったとの段階で後編へのつなぎの意味もこめて、ここに表示
例を一括して掲載しておこう。図1初期画面I(出力先切り替え機能設定、原データのRamDisk転送)
Built-inPRINT->LPRINTCharlgeRcLItine?(CrI[11.N)[Y,.]?Y Youcanusethefollo↓jingcommands、 C1viDON:PRINT->LPRINT CIvlDOFF:Cancel 中中**中小Iや*中中中小小1供*●*****:小小中**O:*+,,い*小才Oq:+of小.小?040.OqOd中中*・0.0:OqO黙ア邑莞石合妻藁言+」棒グラフ<原デー噺$
byRりっichiFlbelgS7、10。 *中中中中中中*中中中中中中中中*や中中中中*中中中中中中*中中中中中中OOq*中中****+:い*中震堯嚇:\鐡二籍H濡鮮縫鵬雰灘脚,
(1)図1は、リスト3にある本プログラム開始時の画面である。
先頭の噸Built-inPRINT->LPRINTChangeRoutine?”から3行目ま
では、文献10から借用した画面表示とプリンタ出力とを簡単に切り替えるRoutine
の組み込みに関する部分である。その詳細はm5で述べるが、図では組み込みを
指示していろ。プログラムのタイトル表示に続くブロックは、原データのRAMDiskへの転
送関係の指示をあたえる部分である。図は、まだ転送していない場合で、原デー
タ・ファイルのFloppyDiskへのセットを指示し、RAMDiskのDrive
numberを尋ねていろ。これは、RAMDiskのDrivenumberが、DiskDrive
-2-中最後の番号を与えられることになっていて、接続されるFloppyぞHardDisk
Driveの台数に応じて変動するのに対応するためである。現実のDriveが2台で あればその次の番号としてCを選択する。 図2初期画面Ⅱ(再起動時、原データRamDisk転送済の場合) (2)図2は、リセット(システム全体の初期化、再起動)をせずに、プログラムを再び動作させたときの画面で、出力切り替えRoutineや転送等の作業が省略さ
れていろ。 図3項目番号の入力、分類集計および記録 Z(第S元)に従って、X(横)、Y(縦)のクロス表を出力します。項目糞曼{dTEnNoJを入力してください。
Y=118 Z=170 0K?[YorCR]Y 計算結果のFileがあります力、?[YorCR】N StartedReadingdataonl7:G7:21 Endedabove,andStartedSummingonl7:07:3g EndedSunwningonl7:B8:BG繧詳「鋪長IW鐡,三’11餃鰡繍誌芹亨
FileDescrpt=B:19187曰(3)図3の前半は、リスト4において処理対象とする3つの項目を、項目番号
で順次指定する画面である。指定後、計算結果Fileが既にあるかどうかを尋ね、集計作業をパスするかどう
-3-力>を決定する。 同Fileがない場合(図の場合)は、Subroutine*CALC(リスト6)に移 り、原データFileのはいっているDrive番号を指定させてから、データの読み
出しと集計の作業にはいる。作業開始と終了の時間を表示する(図では読み出し
に18秒、,集計に27秒を要している)。ついで、集計結果を記録する
・RESULTMEMO(リスト9)に移って、RAMDiskへの書き込みをおこな う。ついでFloppyDiskへの記録の必要を尋ね、Y〔es〕のときは、項目番号の下2桁を機械的に書き連ねたFile名(101870個2a、1)で自動的に書き込み
を行ったのちに、それ以外のキーが押されたときは直ちに、以下説明する表示部
に移行する(本例の続きは図9)。 図4図3下段よりの分岐、集計結果の読みだし 集計結果を読みだします SourceDiskIIb・は?[B~mB B:412B681筆蹟-,鑪露
168PD TRPIVSFERTORFIvlDISK TR$=D:RSLTF'晶篭-1蝋:
168P函 796 796 (4)図4は、前図3の中段で、これから処理しようとする3項目の集計結果が 既にあったため(YまたはCRキーを押して)、リスト10に分岐した場合であ る。集計結果FileのはいっているDrive番号(読み出し元、図ではB)を指定す れば、すでに指定されている項目番号(ここでは1行表示のクロス集計表を見る ため図3とは異なる組み合せの場合を載せていろ)から自動的にFile名(412068)が再生され、集計結果がMemory上の配列に読み出されろ。もしFloppyDisk
からの読み込みであれば、再使用に備えて図のようにRamDiskにRSLTFとい
う臨時名称で転送されろ。その後、上図の場合と同様、つぎの表示部に移行する(本例の続きは図6)。
-4-曲2a、1このプログラムに使用したN88BASIC(86)では、Fileの名称 として、このような数字の羅列も許されている。使月]が禁じられているのは、コ ロンとCharactercodeOおよび255のみである。〔文献7,42頁参照〕しか し、File名による並び替えsort等に支障が出るのであまり奇抜な名称は避ける べきであろう。 Ⅲプログラム後半の内容と実行結果 1表示、主要部(*DISP;3810-4230行他) プログラム後半の役割は、集計結果の配列をクロス集計表ないし棒グラフの形 で、また原データを一覧表の形で、表示することである。その冒頭部分がこの routineで、どの形式で表示するかを選択する。それに応じて、Ⅲ。2および3 にある3つのSubroutineに分岐し、表示後はここに戻って、項目の組合せが変 わらない限りさまざまな表示を繰り返し見ることができるようにな~っていろ。 〔3850〕表示部では、図6のはじめにⅦ対象項目',とあるように、表示に日 本語を使うが、他方で表示routine内では罫線や棒等の表示にグラフィック。キ ャラクタも使っているため、同モードと日本語モードとをそのつど確実に切り替 える必要がある。この切り替えは、CONSOLE文の第5Parameterで行うが、 ここではこれを0にsetして、日本語モードにしておく。以下の主要routineで も頻繁にこの切り替えが行われろ。由3.1 図5HELPKeyによるFunctionKeyの説明、Function表示窓
/
、
FuilctionKeリによる割込み処理の説明 [f、i]処理l1ENuへ戻蜀[f・2]名処理の冒頭へ戻る[f・3]〔RTとPRINTERの切り換易 了解したらどれかキーを押します W同11,雷lE肩i稲RHI1回iW寵i鯛p…とqD-餌。トー日トーヨトー㈲0,-詞b自白 ̄‐丑
、
5〔3860-3900〕FunctionKeyの機能と表示を本プログラム用に切り替え ろ〔図5最下行の反転表示部参照〕。それらの簡単な説明文を表示するHELP Keyも切り替える〔図5上半部は同キーを押した画面〕。(3860,3870行、11. 1.1のONKEY、ONHELProutineの説明、及びⅢ。5を参照のこ と) 図6処理の決定、クロス集計表(1行表示)
辮患姿'1繍繍)欄蜑|…-,J,;i入漁,…《,…戸主年階勵)
ChangetheOrderofSubjects?[Y/]Nど溜欝i生霊ii窯[割1鵬雲團の辮祷Lビガニ曇あ繍与了?c
★クロス集計表★(割り込み処理の説明は肥LPキー) ChangetheOrderofSubjects?[Y/]N 3(168,19G,戸主年階層,6)別X=l(141,08,女・就職観、7):Y=2(128.95-1,収入源1,91織鯛鱗織鱗震垂澪二Ⅷ
表示するのは、Z軸の全値【Z】,特定値[P]?P Zの値【〈8]は?3 〔3920〕CMDOFFで、CRTへの表示を指定した(Ⅲ。5参照)のち、対 象項目の番号、名称、欄数等の諸元を図6のように表示させる。 〔3940〕表示対象の3項目の順序(表やグラフの位置にかかわる)を必要な ら変更するroutine*CHGORDR〔4070-4230〕を呼ぶ。 〔3950-4050〕図6の上記に続く部分に見るように、表示部での処理ブロックの選択を記号の入力で行わせろ。Cでクロス集計表、Bで棒グラフ、Rで原
データー覧、Eで終了である。 終了Eを選択すると、。CLOS〔リスト12;7170-7190行〕へ飛んで、 FunctionKeyに割り当てた機能を終了(KEYOFF)させた後、プログラム 全体を単純に終了する。なお、各ブロック内での分析作業途中でも、FunctionKeyの1を押すと、こ
のroutineに戻って、他ブロックの作業に切り替えられるようになっている。
6。項目11項序変更subroutine 〔4070-4230〕察CHOORDRこの表示部では、3つの対象項目は、そ の指定された'I項序にしたがって、表示の位置が、クロス集計でいえば横軸、縦軸、 垂直軸(集計表の切り口)と、固定されている。これは各軸と項目との関係を自 由とすると、各作業routine中で、処理の繰り返し回数や表示件数の指定などの 点で項目の扱いが複雑になりすぎて混乱し、第3者の解読が困難になるばかりか、 誤謬bugが入り込みやすくなるからである。 しかしこれでは位置を入れ換えた表やグラフを見ることができない。そこで自 由に繰り返し変更できるようにするため、2つのデータ配列を設けることにした。 まず前編で作成された初めの(したがって元配列と以後呼ぶことにする)データ 配列C(x,Y,Z)がすでにある。その項目11頂序〔X、Y、Z〕を任意に入れ 替えて新順序〔N1,N2,N3〕を定め、これにしたがって新たな作業用配列 ,(X,Y,Z)を設定し、これに配列Cからデータを組み替えながら転送する。 表示はこの作業用配列Dを対象に行うことにするのである〔4120-4220〕。つ まり表示は、配列Dを対象に軸を固定して行われるが、配列Dが元配列Cから自 由に組み替えて再編成されるようになっているために、極めて柔軟な表示が可能 になったのである。 だが、この多機能化のために、単一の配列を論理的にだけ組み替える場合より も容易とはいえ、多少の構成の複雑化や見通しの低下は避けられなかった。㈱3.2 ㈱3.1MS-DOS上のBASICでは、漢字codeにSHIFTJIScodeを 使い、モード切り替えにESCK等の特別のcode列(㈱1.4参照)を用いないた め、16進で80番以降のキャラクタcodeは、漢字系とグラフィック系が重なっ て同時に使うことができない。このため使用したN88-BASICでは、CONSOLE 文に第5Parameterを設け、他の系統のキャラクタを使うたびに、この文を書い て切り替えるという、面倒な手続きが必要になったのである。 曲3.2まず配列の表現が2重化して複雑になった。またおのおののDimmension も変更する必要が能じ、4140行で、ERAZEDで元の作業用配列Dを消去して から、DIM文で新たな11項序とそのもとでの回答肢数に応じた次元を指定して再 定義するなど、若干処理が複雑化した。 7
リスト11 3810,...**・******。。*。。*****・゛・*・**な*・*****゛*************** 3815,*
集計結果および原データの表示*
3820,****************************・*・********・**********・**
3825,3830’二二=====二二二二二二=表示、主要部=ニニニニーニニ==ニーニーー
3840*DISP3850CONSOLEO,24,1,1,0:KEY7,',CONSOLE,’’’0,,+CHR$(13)
pp913860DATAMENU,sameRt,chg・PR,,,,…
3870REsToRE3860:FOR’二1TolO:READo$:KEYI,o$:NExT
38800NKEYGOSUB*F1KEY,*F2KEY,*F3KEY
38900NHELPGOSUB*HELP・D 3900KEYON:HELPOMPRINT:PRINT39100BJ.H$=,'対象項目(N、,略号,名称,欄数)'’
3920CMDOFF:PRINTOBJ.H$:PRMOB$(1);08$(2);08$(3)
3930ⅣBR$二,,R,,THENCLOSE#1
3940GOSUB*CHG・ORDR3950PRINT:PRINT,'どの処理をしますか?”
,,割I)込み処理の説明は、HELPキーにあl')ます’’
3960PRINT,,〔C〕クロス集計表,';
3970PRINT,,〔B〕棒グラフ,,;
3980PRmT,,〔R〕原データ一覧',;
3990PRINT,,〔E〕終了,,;
4000INPUTBR$:IFBR$=',,,THENBR$=BR・MEM$
40101FBR$="C,,THENGOSUB*CROS
4020ⅣBR$二''8,,THENCDSUB・MRG
4030FBR$=,,R”THENCDSUB*D・DUNP
4040IFBR$=,,E,,THENmTO・CLOS
4050BR・MEN$=BR$:GOTO3950
4060,
84070*CHGoORDR
40801NPUT''ChangetheOrderofSubjects?〔Y/〕,',C、ORD$
4090ⅣINSTR(",,+,'Yy",CoORD$)THENELSERETURlI
4100PRmlT''0riginalOrder〔X(ヨコ),Y<タテ),Z(ウエ)〕:,P
4110PRIllTOB$(1);OB$(2);OB$(3)
4120PRINT''1NPUTNewOrder〔ウエノx,y,zヲ1,2,3トシテ〕,';
4125INPUT,,,,,N1,N2,N3
41301NPUT''0K〔YorCR〕,,;A$
4135ⅣA$=,,,'oRINsm(,'Yy',,A$)THENELsE4120
4140ERASED:DIMD(S(N1)+1,s(N2)+1,s(M)+1)
4150XS毛(1):YS二s(2):ZS=S(3)
4160FORZ=OTOZS+1:E(3)=Z
4170FDRY=OTOYS+1:E(2)=Y
4180FORX=OTOXS+1:E(1)=X
4190D(E(N1),E(N2),E(N3))=C(M,Z)
4200NEXT,X 4210NEXT,Y 4220NEXT,Z 4230RETURN リスト127170,=ニーーニニ=====二二二二=Ending
7180率CLOS:KEYOFF,KI1L”C:FII1,,
7190剛, 一一 一一 一一 一一 一一 一 一 一一 一一 一一 一一 一一 一一 一一 一一 一一 一 一一 一 一 一 一 一一 2クロス集計表(・CROS;4250-4340行) クロス集計結果を、3番目の項目Zの回答肢番号順に、2次元の表形式(横軸:第1項目X、縦軸:第2項目Y)で、百分率も加えて、順次自動的に表示して行
くroutineのメイン部分である。 作業名を表示した〔図6,3段目〕のち、項目順序の変更routineをへて -9-〔4300行、図、上記次行〕、Z、X、Y各軸の要素を表示する〔同、次行〕。
さらに、集計実数と百分率を同一行で表示するか(*SNG)、2行に分けるか
(*DBL)を自動的に決定し、分岐する〔4330行〕。 これは、Printerが10インチ幅と狭く、英数字をElitemodeで詰めて印字 しても、実数と百分率を1行で表示できるのは、無答。その他。合計の3つの欄 が加わるので横軸Xにおかれた項目の回答肢数が7以下のときに限定され、これを越えると%を別行で表示するほかなくなるためである。しかも、それぞれ書式が
異なるので、・SNGと*DBLの2つの独立したroutineをもうけ、自動的に切
り替えるようにしていろ。 リスト13 4250’二二===============二二==二==================ニーーニーー4255,=二二===ニニニニCROSSTABLE
4260*CROS4270CONSOloE,…O
4280PRINT:PRmTSPC<10),,★クロス集計表★”;
4290PRINT,,(割り込み処理の説明は、HELPキー)'’
4300GOSUB*CHqORDR4310PRINTOB$<M)’'別X二''0B$(N1)”:Y=''0B$(N2):PRINT
4320,-----横肢数による表示変更8>SingleelseDouble
43301FXS<8THENGOSUB*SNGELSEGOSUB*DBL
4340RETURN 2.11行表示(*SNG;4350-4870,6060-6530行他) 横軸Xにおかれた項目の設定回答肢数(XS-1)が7以下、無答。その他回 答・合計の欄を加えて10以下のとき、縦軸Yの回答肢の番号に応じた実数と百 分率を1行に順次表示するroutineで、具体的には次のようなプロセスをへる。 〔図6~8、表1~2参照〕 〔4380-4390〕Subroutine*SELBAS〔リスト15〕㈱33を呼び -10-出し、図6の4段目を表示して、百分率の母数を選択あるいは入力.させる(母数
にする変数BASEのPointerとなる変数BAを決定)。次に*Z、SELCT〔同〕曲3.4を呼び出し、図6の5段目のように、第3項目Zのどの回答肢に対応する
集計表を表示するのかを指示させる。特定回答肢に対応する集計表を表示するの かを指示させる。特定回答肢の場合(ZSEL$=蝋P,,,ZDに回答肢番号)と、全 肢を連続して表示する場合(ZSEL$=碗Z'')とで処理が若干異なる。 〔4400〕PRN=1でPrinterへの出力が指示されていれば、PRINT命令 をLPRINT命令に切り替える役割を与えられたCMDの機能〔リスト22参照〕 をONにし、さらに*ELITE〔リスト17,7150行〕により、Elite字体を指 定して、印字数を増加させる措置をとる。〔4410-4440〕上記の表示対象選択で、全部を選んだ場合は、ここで項目
Zの全回答肢に対するクロス集計表を。SNG.Dを呼び出しながら順次表示する。
〔4450〕同様に特定回答肢を指定したときは、その番号ZDのクロス集計表
を表示する。図6の下段では回答肢番号3を指定していろ。図7がその実行画面 の一部である。図71行表示クロス集計表Display表示
。〔rossTabl唇ヨコニ糞・就職観ダテーlliJlM;il 2o:411「,.a、2 ,.1.Eu「11 under戸王年階層=3 345 01へ「β● 1(0.3)- 24(6.1)3ゴ(3.4)37(9.4)105(2鷹.6) と(0.5)-3(0.9) !(0.3)3(0.8)113(と.5) 、a.’- 1(0.3 111(0.3 9.3〉323(81.3 gl- IUE》(とe、El) 3(0.2) 12(3.0) 16(4.1) I(0.3) 1(0.3) 9(2.3 。0 (0.3j3lEI5(IDD)蝋辮掌''::'臘繍犀雷:叩
, X軸項の解答肢数が多いためその他と合計欄が折り返して表示されて、見にく -11-いものとなってしまったが、Printerに打ち出して検討するのが主であるため、 Display上では見当をつける程度の目的で使うので、差し支えないであろう。 表1が、Printerに打ち出した例である。見やすい表示になっていろ。 表11行表示クロス集計表Printer表示 *CrossTableヨコ=女・就職観タテ=収入源1under戸主年階圏 ’ロ.a.23456 2 a 20:4 sum D0aO 1 2 3 4 5 6 7 8 a1. 8U■ 1(0.3)26l6.5)30(7.5 1(0.3 1(0.31- 2(05)- 1(0.311(0.3 M0.3)- 1(0.3131(7.8)32(8.0 33(8.3 2(0.5 M0.3 1(0.3 0212;.6 4(1,0 2(0.5 M0.3 2(0.5 -5(3.8 - 362(90,7) 11(2.8) 3(0.8) 4(1.0) 〕(0.8) 611.5) 812.0) 2(0.5) 399(100) ”(38.8 5(1,3 M0.3 1{0.3 1(0.3 4(1.0 2(0,5 1(0.3 110.3 6 1(0.3- -38(9.5 1(27.8 - 70(42.6 - 16(4.0 項目入れ換え例 図8 ? こ'X)処理のネ鵬に戻ります〔'}ミ?[Y□「[R] ★クロス集計表★(割(〕iムみMIJ里iZI説明は}|ELPキー) Cl1anqPthEP〔lrdBrofl3I」biFiごls?[Y]Y 〔I「iqinal〔lri」今「[》<(ヨコ),,,,(,テルこ(ゥl)]8 1(i41,99,女・就職観,7)2('2121.1215-1,IMJliiiI.`〕)〕(l〔,3,Hq戸主年階層,〔,) INPUTNEPIAl〔l「(l色r[ウェノ、,u,こヲ1,2,3にIテ]3.1.2 〔1K[YOrl:.R]?Y 2(120,95-1,1M、源I.E})別;《=3(IIE,E,H〔】、戸王年階層,6):Y=l('4い:IML7.jiilllill観.7
i鍵世祷i澱奮|鑿學騨凄鯉:lご川
壽聯椚霊BIB圭値に肌特定値[FwP
なお、前述のように、項目11項序変更subroutineを使うと、切り口を替えてデータを検討しなおすことができる。図8は、FunctionKeyの2を押して、こ
の処理の冒頭に戻り、、OChangetheOrderofSubjects?”の問に'9Y”と答
えて変更を行った例である。ここでは、Z軸として表面に出ていなかった168項 が横軸に、横軸だった141項が縦軸に変更されている。表2は、そのPrintoutであるが、前図と全く異なった角度からの検討を容易にしていることが伺えよう。
〔4460-4470〕*OUTCHG〔リスト16,7530-7580行〕を呼んで -12-必要に応じてFunctionKey3の切り替えroutineを呼び出して切り替えたの ちに、このブロックの冒頭に戻る。この結果、無限ループが形成されるので、こ のブロックからの脱出は、fo1キーを押す以外にない。 表2図8による1行表示クロス集計表Printer表示 *CrossTableヨコー戸主年階圏タテ=女・就職観under 41:681、,a. ’234 収入源1=sum 5aL gum 4(0.3) 88(7.4) 98(8.2) 120(10.1) 364(30.5) 447(37.5) 69(5.8) 2(0,2) 192(100) l(0.1)l(0.1)2(0,2 9(0.8)31(2.6)29(2.4 14(1.2)〕2(2.7)38(3,2 19(1.6)38(3.2)43(3.6 43(3.6)111(93)131(11.0 81(6.8)170(14.3)130(10.9 4(0.3)16(1.3)21(1.8 1(0.1 71(143)399(]3.5)305(33.1 OG■■且nJuへ&■シn尺“岳PhD〃〃生、u ■(』 C hu 7(0,6) 7(0,6) 810.7) 26(2.2) 23(19) 16(13) I(0.11 88(7.4) 12(1.0) 7(0,6) 12(1.0) 53(4,4) 4313.6) 12(10) 39(117) aL Su目 車SNGLD 〔4490 4630〕 Sub routine 4760行〕を呼んで表題〔4680 まじめに、Subr *CRSHD〔4650 行〕と横軸の見出し〔4700-4730行〕を見やすく表示し㈱3.5、区画線を引 く〔4750行〕㈱3.6゜ ついで、Y軸の値を順次増加させ行替えしながら〔4510-4610行〕、以下 の操作を繰り返して目的の表を描きだす。まず傘LNO〔4780-4810行〕を呼 んで、縦軸の見出しとして行番号あるいはsum等の記号を書き縦罫線をひく。 次にY軸の値に対応したX軸の各数値Wと、()に入れた百分率を続けて表示 していき、X軸合計欄を表示後改行する〔4530-4590行〕・数値Wが0の欄 は多くあり表が見にくくなるので、区別しやすいように彩欄と一括して↑'一”の みを表示していろ〔4570行〕・百分率は、前記察SEL・BASで選定した形基準 BAに基づき、*POBAS〔リスト15,6310-6370行〕で基準数BASE を復元したのち、*PC・DSP〔同、6390-6450行〕で計算し、整形表示す る。燭3.7 ㈱33準SELBAS〔リスト15,6070-6220行〕では、百分率%の基準 を簡単に指定できるように、総計、合計、横計、縦計、その他、さらに耐前回に 同じ,,(CRキーのみを押す。変数FBASEに記憶させておく)のメニューの中か -13-
ら番号で選択するようにしていろ。その他の場合、*SEL、INP〔6230- 6290行〕を呼んで手入力する(変数SL.Xほかとして)。これら変数は、 pointerの役割を果たし、後に。PC・BASで現実の変数BASEに変換される。 閏3.4.Z,SELCT〔リスト15,6470-6530行〕は、表示の軸になっ ているz軸の項目について、全部を表示するのか、特定の値の断面を表示するの かを選択させ、特定値の場合はその値ZDをinputさせるroutineである。 曲35各行列の内容を指示する見出し部分は、番号のみでは解りにくいので、
無答を表す数0番の回答肢は。n.a.”と表示させ、規定外のその他回答の欄は
wal.,,、合計欄(XS+1番)は伽sum,,と表示するようにしていろ〔*ANS・ IDX、4830-4870行、その他は番号が表示される〕。これは、縦軸の見出し についても同様に行われろ。 樹3.6本リストは、漢字平仮名が使われているため、日本語・キャラクタ・ モードで印字されているが、罫線には使いやすさからいわゆるANKモードのグ ラフィック・キャラクタを使っている。本章冒頭で指摘したように、両モードは 同時使用できず、罫線用キャラクタを嘘,,に入れたプログラムにすると、それ自 体は有効な処理であるが、日本語モードでリストをとるとその部分が意味不明の 漢字や記号に化けてしまい、リストとしての機能を損なってしまうので、4750 行ではキャラクタcodeで入力していろ。149が横線部分を、143が縦線とのク ロス部分を意味する(文献8,19-140ほか参照)。 ㈱3.7*PC・DSPで、百分率影は、表示可能桁数が少ないことと、分析 上の必要を勘案し小数点以下1位まで小数点を含め4桁で表示すること にした〔6450行〕・表示範囲が狭いために、100を越える場合の対策が必要 となるが、ここでは合計欄にしばしば出現する100%の表示を、単に鰊100,,と 表して他数値と区別しやすくし〔6410行〕、それ以上は小数点以上4桁の% で表し〔6440行〕、範囲をはみ出す100倍以上は%で示す意味が薄くもなるので、、**,,と目だたせて別扱いとした〔6420行〕。
リスト14 4350,=== 4360*SNGDispinSingleLine(Elite,Conds)
-14-4370
CONSOLE ,.,,0
4380
GOSUB *SEL.BAS
4390 GOSUB .Z.SELCT
4400
IF PRT THEN CMD ON:
GOSUB *ELITE
•printer=elite
4410
IF ZSEL$="Z" THEN ELSE
4450
4420
FOR
Z=O TO S(N3)+1
' All
of
Z
4430
GOSUB .SNG.D
4440
NEXT: 6010
4460
4450
Z=ZD: GOSUB
.SNGaD
'
Random Z
4460
GOSUB ••OUT.CHG
4470 0010
-SNG
4480
,---4490
.SNG.D
4500
GOSUB *CRS.HD
4510 FOR Y=O TO S(N2)+1
4520
GOSUB
*LNQ
4530
FOR X=O TO
S(Nl)+l
4540
W=D(X,Y,Z)
4550
GOSUB .PC.BAS
4560
IF W=O THEN ELSE 4580
4570
"
: OOTO
4590
4580
PRINT USING "####(";W: :GOSUB .PC.DSP: PRINT ")";
4590
NEXT
'X
4600
4610
NEXT
'V
4620
4630
RETURN
4640 '---
Head
l.ine
4650
.CRS.HD
4660
CONSOLE ",,0
-15-4670
A=Z:
VS=S(N3):
GOSUB -ANS.IDX
.
4680
"-Cross Table
3J="
;W2$(Nl);"
tf=";W2$(N2);
"
under ";W2$(N3);"=";ANX$:PRINT
4690 CONSOLE ",,1 : VS=S(Nl)
4695
IF PRT THEN PRINT: GOSUB -ELITE
4700
PRINT FNC$(N2)":"fNC$(Nl);CHR$(150);
4710
FOR
A=O
TO S(Nl)+l : GOSUB *ANS.IDX
4720
IF VS(8 THEN PRINT"
"ANX$"
ELSE
PRINT "
"ANX$ ;
4730 NEXT : PRINT
4740
IF VS<8 THEN
XLEN=(S(Nl)+2)*10 ELSE XLEN=(S(Nl)+2)*5
4750
PRINT STRING$(5,CHR$(149»;CHR$(143);
STRING$(XLEN,CHR$(149»
4760
RETURN
4770
'---4780
*LNO : IF PRT THEN GOSUB -ELITE
4790 A=Y: VS=S(N2): GOSUB *ANS.IDX
4800
PRINT "
"ANX$;CHR$(150);
4810
RETURN
4820 '
4830
*ANS.IDX
4840
IF A=O
THEN
ANX$="n.a." :RETURN
4850
IF
A=VS
THEN ANX$="
al."
:RETURN
'others
4860
IF A=VS+1 THEN ANX$="
sum"
:RETURN
4870
ANX$=RIGHT$("
·'+STR$(A)
,4) : RETURN
I)~,..
15
6060
'=======
Sub-sub routine
========
6065 '---
Base for
%---6070 .SEL.BAS :CMD OFF
-6080
PRINT OB$(NI);OB$(N2);OB$(N3)
6090
PRINT "
%~.~.~1:~m~L·-c
<
t!..~ ~\o
6100
PRINT " Dfj(:"FBASE")
t
fRJ
t.'d:'
t:,
CR~-"6110
(1)
~~:C(Xsum,Ysum,ZsUDl) ";
6120
PRINT"
(2)
~it:C(Xsum,'lsum,Z)
"
6130
PRINT"
(3)
Mit
:C(XsuIB,Y,2)
"
6140
PRINT"
(4).it
:C(X,YsUII,Z)
6150
PRINT"
(9)
~~flf!"6160 INPUT BA$
6170
IF BA$:"" THEN BA=FBASE:RETURN
6180
BA=INSTR("1~349",BA$)6190
IF BA=O THEN
6160
6200
IF
BA=5 THEN GOSUB *SEL.INP
6210
FBASE=BA
6220
RETURN
6230
'---6240
*SEL.INP
6250
INPUT"
~.tT~I1~
X,Y,Z
-r:'AtJ
",SL.X,SL.Y,SL.Z
6260
IF
D(SL.X,SL.
V
,SL.Z)=O
THEN
.to
DATA! ":GOTO
6250
6270
INPUT "OK
";A$
6280
IF
A$=""
OR
INSTR("Yy"
,A$) THEN ELSE 6250
6290
RETURN
6300
,---6310
*PC.BAS
6320
IF BA=] THEN
BASE=D(S(Nl)+1,S(NZ)+1,S(N3)+1):
RETURN·
6330 IF BA=2 THEN BASE=D(S(Nl)+l,S(NZ)+l,Z): RETURN
6340
IF
BA=3
THh~BASE=D(S(Nl)+l,Y
.Z):
RETURN
6350
IF BA=4 THEN BASE=D(X
,S(N2)+I,Z): RETURN
6360 IF BA=5 THEN BASE=D(SL.X,SL.Y,SL.Z)
6370
RETURN
17-6380
'---6390
*PC.DSP
6410
IF W=BASE THEN PRINT" 100"; :RETURN
6420
IF W}100*BASE THEN PRINT" ** "; :RETURN
6430
IF W>BASE THEN ELSE
6450
6440
PRINT USING "####";W*100/BASE; :RETURN
6450
PR1NT
USING"##.#";W*100/BASE;
:RETURN
(..4()O .. --- ---
Select.ion for
Z
---6470
*Z.SELCT : CMu OFF
f.480
PHINT
"1(iJ~'~-{)
\l.>ti,
Z
,mO)
~lIftLZJ•
~~JEfllr.p.l C)".h!l'-JO
IN1·tLJ
I
" I f.1.~EL$:It·
ZSEt~$="Z"THEN RETURN
6500
JF /.SEL$="P" THEN ELSE
6490
6,10
ZV>1I«C
<"S(Ni)+2"']tt?
tt;:
INPUT
t i f t.ZD
(~5~OiF ZD> S(N) +
1
THEN
6510
(Jij.)(J KETUH~
I)
~
"16
7530 '---
Changing of
Output
devices
---7540
*
.OUT•
ClUJ
7550 CMD OFF: UlNSOLE ".,0
7560
(Y/)
tt;
7570
IF INSTR ( "Yy" ,INPUT$
(1
»
THEN GOSUB *F3KEY
7580
PRINT: RETURN
I) ~ "
17
7140
'===============
Printer chr Size
===============
7150
*ELITH :
LPRINT
CHR$(27);"E":CHR$(27);CHR$(1);:RETURN
7160
*CONDS : LPRINT CHR$(27);
"Q":: RETURN
-2.22行表示(*DBL;4740-5150行)
X軸の有効回答肢数が8以上のときに、X軸の各数値を、1行目に実数、2行
目に百分率と、2行に分けて表示するルーチンである。〔図9~10、表3参照〕。
〔4900-5010〕*DBLここのメインルーチンで、Z軸項の表示対象選択 をはじめ2゜1と同じであるが、表示routineが*DBL.Dとなっている点だけ が異なる。 図9処理の決定、クロス集計表(2行表示)ポ1需具畿蠕'重iiW蝋)生計費に)3(I7aM域s分類,,)
ChangetheOrderofSubjects?[Y/]ど溜雪;;鵠潔[割鰐蝶の辮原季LE妻二塁あ艦謹了?c
★クロス集計表★(割り込み処理の説明は、HELPキー) ChangetheOrderofSubjects?[Y/】3(170,A8,地域8分類,9)別x=l(12,GR,学歴,11):Y=2(118,03,生計費,12)
艤繍辮繍:騨騨…
?l誘繍|まi,霊由牙全値[z山特定値[川P
図9は、図3に続くもので、Display上では1行表示の図6と同じである。図102行表示クロス集計表(Display表示)
・CrossTableヨコー学歴タテ=生計費under地域8分類=3 -19-〔5030-5300”DBL.,2.1での*SNG.Dと同様な構成であるが、
縦軸項Yの各解答肢ごとに、X軸項の各解答肢の数値を表示するのに、まず
実数値だけを1行に打ってしまい〔5080-5130行〕、次の行に百分率のみを表
示する〔5150-5260行〕ことを繰り返す構成になっていろ。図10がDisplay
に表示した例である。ここでは、元来有効回答肢数が多いものを2行表示にしたため、表示上の工夫
が必要となった。Printerに打ち出して検討するのが主であるため、これを優先
し、ElitemodeとCondensemodeとをうまく組み合せて、実数欄と幅をそろ
えながら字体に変化を持たせた。曲3.8この結果、表3に見るように実数、百分
率の区別が明瞭で、見やすい表になった。他方、Displyへの出力は、Character
の大きさを選べず表示の区別がつきにくいこともあり曲3.9,1行表示のさいと
同様の見にくさが生じ得るが、同様の理由で差し支えないであろう(図10でわか
るように、有効回答肢が11までは折り返さずに表示されろ)。
表32行表示クロス集計表Printey表示 *Cro83TabIeヨコ=学歴タテ=生計費under地域8分類=sum l8:101,a.12345678910a1.8u田 ロ.a.I12312- 1(2.6)(0.])(0.8)(2.2)(1.7) 1112]6811- 1(31.6)(6」)(2.2)(22)(0.8) 21710538274 1(10.4)(17,7)(10.6)(4.])(5.8)(12.1) 〕11215885101111 1(31.6)(26,7)(23.7)(21.7)(9.2)(33.3) 4141;099103011 1(10.5)(25.3)(27.7)(21.7)(25.0)(33.3) 51274649271 1(5.3)(12.5)(17.9)(19.6)(22.5)(]0) 61-4130519〕 (6.9)(8.4)(10.9)(15.0)(9.1) 71-1593122 (2.5)(2.5)(6.5)(10.0)(6.1) 81-51031 (0.0)(2.8)(2.2)(2.5)(]0) 91-4712- (0.7)(2.0)(2.2)(1.7) 101-1325- (0.2)(0.8)(4.])(4.2) 111-1211- (0.2)(0.6)(2.2)(0,8) a1.1- 9 (0.0) 58 (4.9) 164 (118) 289 (24.2) 306 (25.7) 177 (14.0) 98 (8.2) 41 (1.4) 20 (1.7) 14 (1.2) 11 (0.9) 5 (0.4) (’00) 2 (66.7) (]].])(100) 38592358 00)(100)(100) 00)(100)46120 33 00) 00)] Su■ 1 00) 1 00) 1192 (100) 20㈱3.8Printerへの出力では、実数にElitemode(linchあたり12字) で5字分、百分率には同じ長さにするため同modeで1字分の空白とCondense mode(linchあたり18字)で()を入れて6字分を加えたものとしている 〔*DBL・PRN、5230-5250行〕。この空白と()と字サイズの相違に よって、実数と百分率とが混同される可能性が低くなっている。… 油a9Display上でも、200からDOO番台のcodeに半角文字が指定され ているので、使えないことはないが、Printer出力用とcodeが異なり2重の指 定が必要になるなど不便でもあるので、全角文字で表示した。実数には5字分、 百分率は小数点1位までに影記号をつけて同じく5字分としている〔5210行〕。 リスト18
4890’二===Twolines:E1ite####/Condense(##.#)
4900*DBL4910CONSOLE…,O
49ZOGOSUB*SELoBAS 49〕OGOSUB*ZoSELCT 4940IFPRTTIlENCHDON:GOSUB*ELITE49501FZSEL$=,,Z”THEN497()
4960Z=ZD:GOSUB*DBL.D:GOTO5000,RamdomZ 4970FORZ二OTOS〈N3)+1,A11ofZ 4980GOSUB*DBLoD 4990NEXT 5000GOSUB…OUT・CHG 5010GOTO*DBL 5020,----5030*DBLD 5040GOSUB*CRS・HD5050FORY二OTOS(M)+1
5060GOSUB*LJlIO 5070FURX=()TDS(N1)+1 -215080v=D(X,Y,Z〉
5090IFPRTTHENGOSUB*ELITEprn=elite
5100IFW=OTHENPRINT’’-,,;:GOTO5120
5110PRINTUSmIiG,'####,';111;
5120NEXT,X 5BOPRINT5140’----for%
5150PRINT,,,,;CHR$(150>;
5160FDRX=OTDS(M)+1
5170w=、(x,Y,z)
5180GOSUB*PC・BAS 5190IFPRTTHEN*DBL・PRN 5200IFW=OTHENPRmlT,,”;:Gom5260
5210GOSUB・PC・DSP:PRINT,,%,,;:GOTO5260
5220*DBLPRN:5230LPRINTCHR$(27);,,E,,;',,';CHR$(27);''01';,condense
5240IFW=OTHENPRINT,,
”;:GOTO5260
5250PRnlT,'(,,;:GOSUB・PC・DSP:PRINT,,),';
5260NEXT,X 5270PRINT 5280NEXT,Y 5290PRINT 5300RETURN 3棒グラフ表示(*BARG;5320-5860行他)対象3項目のうち、任意の項目の各回答肢の数値分布を、
呵家3項曰のつら、仕恵の唄曰の各回答肢の数値分布を、任意に指定した母数に対する百分率の形で、棒グラフで表示する。そのさい他の2項目(軸)は、合
計値(単純集計の結果)のみならず、回答肢番号を自由に選んで、多角的に繰り
返し表示できるようにする。Printerへの切り替えは前と同様である。
-22-〔5320-5410〕屯BARG 棒グラフ表示routineのメイン部であるが、ここでは平面上の棒グラフ(*BAR 2)のみが組み込まれているため、なんの操作も行わずに次につないでいろ。し かし、現在、二次元のクロス集計表をそのまま立体化する立体棒グラフ表示 routine(*BAR3)を開発中である。のちほど、これを直接組み込むか、別の プログラムとして作成しておき必要な時にCHAINMERGE文で組み込むかし て機能する予定であるが、その時にはこれら2種の棒グラフ表示を選択する routineがここにはいることになる。 〔5420-5590〕*BAR2(平面棒グラフ表示) 表示したい軸(項目)を決めるroutine*BAR・OBJ〔5610-5690〕油3.10 から始まって、百分率の基準を定める既出〔リスト15〕の*SEL、BASおよび
*PC、BASをへて、棒の長さを定める*SCALE〔5800-5860行、ANK文
字80字という画面横サイズから、60字分を1行のfullscaleとし、既定値 は1%を1字分としている〕を呼んで、棒を表示するroutine*DPS・BARを 呼びながら、対象項目の全回答肢の百分率を連続して表示する。 〔5870-6050〕*DSR、BAR〔リスト20〕 指定された回答肢の実数の母数BASEに対する百分比を横棒の長さで表示す るが、使用パソコンに固有のグラフィック・キャラクタのうち、各字桝の左端か らndot目まで縦全幅で塗りつぶすものが8種類あるので(16進character codeで87から8Eまで)、これを利用して、連続した棒を描いていろ。 まず、見出し部分と数値、百分率と区画線を描いた〔5910-5940行〕後、 比率に応じて字桝全体を途りつぶすcodeを重ねて出力し〔6020行〕、端数部 分は、最も近い8分位数を算定し〔5900行〕㈱3.11これに対応するcodeの部 分塗りつぶし模様を出力する〔6030行〕。これにより、図11~12に見るよ うに疋確な横棒を表示できるのである。 このグラフィック・キャラクタを用いた手法は、棒の幅を選べないほかは、 dot単位で細かく表示するいわゆるグラフィック表示と全く同じ精度を持ち、グ ラフィック表示では複雑になる文'j三等のキャラクタ表示との連動(クロス集計表 等との混用や画面の同時移動、消去等)の配慮が無用であることから、実用性の 高い方法といえよう。 -23-平面棒グラフDisplay表示 図11 =平面棒グラフ表示=
蝋議瀞i黙二二誉lW。…戸主年階剛
鑪繍i謹鋳震耆職繍騨雷:Ⅷ
1(14霜ii}i
[2]= [3】= 1(14 %の 【l 【3 ?2 I1IPUT トb・M n・a.: 1: 2: 3: 4: 5: 6: aL sum 出力 =平面樺グラフ表示=衾艶綴目鱗iMI…一山収入源''9)`('…,戸主年階鳳6)
平面棒グラフPrinter表示 図12 No.141女・就職観 、.a、:l(0.3) l:24(6.1) 2:”(8.4) 3:37(9.4) 4:105(26.6) 5:106(26.8) 6:16(4.1) aI.:1(0.3) Bum:323(81.8) No.168戸主年贈囲 ロ.a.:-(-) 1:76(6.4) 2:155(13.0) 3:106(8.9) 4:12(1.0) 5:2(0.2) a1.8-(-) 8m:351(29.4) No.168 〕一コ
/No.141=  ̄ヨ■■■■■■■■■■
5 No.120=’
二コ一一
24また、図12の上のグラフは、表示項目を替え、こオlを規定する他項目の回答 肢を変更した例である。さらに、百分率の母数を総数に替えたため、棒が短くな るので、上述の*SCALEroutineで2を指定して、棒を2倍に拡大していろ。 このように、この棒グラフ表示は、簡単な指示で多角的な分析ができるようにな っている。 糊3.10表示したい軸は、inputで簡単に定められるが、他の軸については、 合計欄をsと入力させると、こオlを解析してそれらの値を定めるのは若干面倒に なる。このため、さらに下位のSubroutine*SEL、BOB〔5700-5790行〕を 設け、処理に当らせている。 曲3.115900行の前半で、BOを算出するのに、、625を加えて切捨て型の 整数化関数INTで処理しているのは、1/8に対するいわば4捨5入を行うた めであり、次にB2をSCALE倍した百分比とBOの差を8倍して今度は4捨5入 型の関数CINTで出しているのは、最後の桝の幅を定めるためである。 リスト19 5310,=================================ニーニニーーニ====
5315’二========二二=BarGraph===二二二二二===========
5320*BARG5330’----Graphtypeswitchroutine*BARO、and
5340,EnterancetoB-Ddisproutine*MRj,
5410,---bebere.(91inesormoreareavailablehere.)
5420*BAR2 5430SCALE.M=1:K=O 5440CONSOLE,,,,O:PRINT5450PRINTSPC(26);,'=平面棒グラフ表示='':PRINT
5460GOSUB*BAR・OBJ 5470GOSUB*SEL・BAS 5480GOSUB*PCBAS 5490GOSUB*SCAlE -25-~SO()
114 PRT THEN CMD ON
5510
PRINT BHD1$;" //"; BHD2$: IF PRN THEN PRINT
'Heading
5520
~'ORDW=O
TO OS
5530
IF AXS=l THEN W=D(DW. Y. Z)
5540
IF AXS=2 THEN
W=I)( X~DW.Z)
5550
IF
AXS=3
THEN W=D( X, Y.DW)
S5bO
OOSlJB
*DSP.BAR
5570
NEXT
5580 GOSUB *·OUT.CHG
5590
CMD OFF:GOTO
5440
5600 •
:::::'"~'.=:':==5610
*BAR .OBJ
'
for
Heading
5620
PRINT OR$(Nl);OB$(N2);OB$(N3)
5f)"iO INPUT ...
~j~tJ'
t--:
~'JQ
§
'j:
C?C
1
.2,
3J ",
AXS
S640
I~AXS<l
OR AXSJ4 THEN 5630
5650
"$7)41
~(1)«IJNo
-'-1?
(f1~IJ'j:s
.~~wnj: 0)u5660
K
=
1:
L=N
1:
(DSUB
*SEL.
BOA : X=A
5670
K=2:L=N2: GOSUB *SEL.BOA
:¥=A
56MO
K=··~:L=N3:(X)SlJB
*SEI,.BOB
:Z=A
5690
RETL!HN
S/UO *SEL.BOB
5710
IFAXS~K 'n~ENELSE
5730
'J720 nS=S(L)+ 1: A=O:
BHD]$="No.
"+~~NN$(L)+""+W2$(L):
mTO fJ790
5730
CHR$(87+K);
u=";:
INPUT
BD$: VS=S(L)
5740
1f AD$="S" THEN
A=S(L)
+
1: OOTO 5770
5750 IF BO$="O" THEN A=O
: 0010 5770
CJ7bO
A=VAL(BD$): IF A=O
OR
A>S(L)+j
THEN
GOTO
5730
5770 GOSUB *ANS.IDX
S7tiO
BHD2$=BHD2$+"
No."+FNN$(L)+"="+ANX$
-26-5790 RBTURN
5800 '--- Scale of %-Bar
5810
*SCALE
5820
PRINT "INPUT Devider
(n)
for % Scale a line ";
5830
INPUT "(full scale=60%
In )
(ditto=CR)
",GA$
5840
IF GA$="" THEN SCALE=SCALE.M ELSE SCALE=VAL(GA$)
5850 IF SCALE=O THEN *SCALE
5860
SCALE.M=SCALE: RETURN
IJ~1'205870
'======= disp Bar ========
5880
*OSP.BAR : CONSOLE
",,1 .
5890
W.PC!=W*100/BASE
5900
BO=INT(W.PC!*SCALE+.0625): B2=CINT«W.PC!*SCALE-BO)*8)
5<)10
A=DW:
VS=DS-l:
GOSUB
*ANS.IDX: PRINT ANX$;":";
5920
IF W=O THEN PRINT"
-
( -) ";:
OOTO
5940
5930
PRINT USING
"#### ("
:W:: GOSUB
*PC.DSP:
PRINT ")
"~5940
CHR$(224);
5950 FULLB=BO
¥
60: RESB=BO MOD 60
5960
IF FULLB THEN ELSE
6020
5970
FOR
1=1 TO
FULLB
5980
PRINT STRING$(60,135)
5990
IF
J=Fm~LBAND RESB=O AND B2=0
THRN
6010
6000
CHR$ (224); '2nd
1
ine
6010
NEXT
6020
IF RESB THEN PRINT STRING$(RESB,135);
6030
IF
82
THEN PRINT CHR$(135+B2);
6040
PRINT: CONSOLE
",,0
6050 RETURN
-Z1-4原データ表示(*D・DUMP;6535-7110行)
アンケート回答のFile、FAMFLDATにはいっている原データを、一件
ごとに、なんとかチェックできる程度に加工して、一覧表示する。連続表示も可 能とする。異常なデータの内容を確認して(誤りが集中していることもある)訂 正に役立てたり、全体の傾向をざっと見渡すのにも使用される。Printerへの切 り替えは前と同様である〔図13参照〕。 〔6580-6600〕初めてこのroutineに入ると、原データのFileのあるDrive 番号を尋ね、FileをOPENして、データ列を項目に割り付けろ〔6590-6640 行〕。2回目以降は、変数DRV$にその番号が入っているためここはパスされ ろ〔6580行〕。 〔6660-6780〕表示するRecord番号を尋ね、次の*D・LISTを呼んで 家族人数に応じて5ないし10行でその内容を表示する。操作を簡単にするため 次の番号を見るときは、単にCRキーを、直前の番号を見るときはBS(Back Space)キーを押せばよいようにしてある。wE,,を入力すればこのダンプ routineを終了し、表示部メニュー*DISP〔リスト11〕に戻る〔6680-6730 行〕・図13は、500番のデータをDisplayへダンプした図である。表4はその 次の501番の:データをPrinterへ打ち出したものである。 図13原データ・ダンプDisplay表示 ★原データ・ダンプ`★ 表示するRecordNo・は?[次=CR,前=BS,終了=E]SUD 5 、少 118 -一R 80く 一-1 BC --2 13 -- 1116 -一一- 9904 GB|シ |’0, 42へdF NFうぐ *心R》I 22ID 一一f、’ 6514 35200一一 一一一日019 11048}1 ,4一一一5’ ’1000,1 l0B3J gl41K L(埋○昨亜 、、/022 -5001 4Ql0|- ’く--10/ 3400〒、“Y 5l0UllⅢ 0444’2辿醒稻轌》宰必勵
叩沙旧烟剣且変 一J1⑲uuJ氾先 nsp馴犯姻宅旧力 臥pJq②。Ⅱ昨出 ・22402く一 PllB00l2 l1l’10一ン0 --1一一688 99,日0,15 001008く 一一Q44Q0。 ”ぬ師く、富・く中叱 5**111 1161a1d ・一一一p・Ir o0627一ao N04QQSTC 一一・・・一e C112224R 舵、巴巾印印、前 -28-表4原データ・ダンプPrinter表示 RECNo.501[P、0-11-04〕-1054-2-[Cl-00-2oP4-14-1-1-1-1-1[2]_l2-1DI7-O9-1-2-9-3-1 [p2.oz-6】くQ1>1-132-08<Q2>80-2-3<05>4-3-0-0-1 【p2.Q7j①800-002②800-002③800-002④800-002 ⑤800-002⑥800-002⑦800-400⑧800-400 [p2.8-P3】<Q8>6-1く11>2-1<12>3-1-1-250<13>2-2-4く16>60-0-3 [p4-Tall]●0く18>0-0<19>0-0-0<21>0<CK>1-15-4-,2<FD>4-6-4-1〈A8>5 〔6800-7110〕*D・LIST 指定されたRecord番号のデータを読み出し〔6820行〕、まず1行目に、その 番号と、作業用codeや家族数など4項目を書き出す〔6830行〕。
2行目からは、家族の基礎データ(各10項目)が、6850行の書式(各項目の
境界は、おもに髄-,,で示す)にしたがって、1行に2人づつの割で表示されろ
〔6840-6900行〕・家族人数分を表示すれば、この部分の作業を終えて次に移る
ので、行数は変動する。その後、6920,7020,7070行の各書式にしたがって、質問項目への回答
が順次表示されていく。各書式の諸処に、鰊<Q5>,,、『!<18>,'、碗<FD>,,
等の記号があるが、これらは質問項目番号やその略称で、前後の質問項目の番号
を割り出す指標に入れてある。こうして1件の表示が済むと、このSubroutineは終わって、6760行に移
り、Printer等への切り替えをするかを聞いたのち、2段目の冒頭6660行に戻
って、表示を続けられるようになっていろ。 リスト216535,=================二二=ニーーニーーニ===ニニーニニニニ===
6540,=ニーーーーーDumpofRawDatainDataFile二二二====
6550*DDUMP 6560ClIDOFF:CONSOLE,,,,0:U二O6570PRINT:PRⅢTSPC(30),'★原データ・ダンプ★'’
6580IFDRV$<>",,THENGDRV$=DRV$:GOTO6610
6590PRINT',原データのあるDRIVEのNo.〔B~D〕は?,,;
6600INPUT,,,,,GDRV$:IFINSTR(,'BCD,,,GDRV$)THENELSE6600
-29-661.0 OPEN GDRV$+" :FAMFL.DAT'· AS
#1
6620
FOR 1=1 TO
170
6630
GOSUB *BT:FIELD #1,U AS DUM$,BT AS P$(I):U=U+BT
6640
NEXT
6650
,---6660
eND OFF:
CONSOLE
",.0
6670
No.'j:'"!
(<X=CR,fiij=BS,~7=EJu;
6680
DMP$=INPUT$(l)' :
DMPT=VAL(DMP$)
6690
IF DMP$="E"
THEN RETURN
6700
IF DMP$=CHR$(13) THEN DMP=DMP+l: 6OTO 6730
6710
IF DMP$=CHR$(S) THEN
DMP=DMP-l:
GOTD 6730
6720
PRINT DMP$;: INPUT ,,,, ,FOLLOW$: DMP=VAL(DMP$+FOLLOW$)
6730
IF DMP<l OR DMP)
1192
THEN
6680
6740
IF PRT THEN CMD ON
6750
PRINT: GOSUB *O.LIST
6760
CMD OFF:
"RfjRec.No. "DMP"
m1J~J!?(v/) ";
6770 IF INSTR("Yy",INPUT$(l»
THEN GOSUB *F3KEY
6780 G010 6660
6790
,---6800
*D.LIST
'Listing Raw Data
6810
6820
GET #l,DMP
6830
PRINT "REC
No.
"DMP"
(p.a-I)
_"P$(1)"_"P$(Z)"_"P$(3)"_":
6840
'***face
sheet
'?
USING"(!)_&&_!_*&&_& &_!_!_!_!_!_ "
6850
DATA (,J_,_,*,_,_,_,_,_,_,_
6860
NF=VAL("&H"+P$(3»)
6870
FOR
M=O
TO NF-I :
RESTORE
6850
6880
IF MMOD 2 THEN PRINT TAR(40); ELSE
PRTNT
6890
FOR
L=O TO
9:
READ M$: PRINT M$;P$(lO*M+L+4);: NEXT
6900
NEXT M: PRINT
-6910,***p2.Q1-Q6
6920DATA,,〔p2.Q2-6〕〈Q1>''’-,-,<Q2>,-,-,<Q5>,-,-,-,-,-6930R鴎TORE69206940FoRM=114,124:READcQ$:PRINTcQ$;P$(Ⅱ);:NExT
6950PRINT6960,***p2Q7
6970PRINT,'〔p2.Q7〕,';:FORM二lTO8
6980ⅣM=5THENPRINT:PRINT,, m6990PRINTKNJ$<MEX$(&H2D抑Ⅱ)>;P$(123+M*2)"_''P$(124+M*2);
7000NEXTII:PRINT7010,*・*p2.Q8-p3
7020DATA,,〔p2.8-P3〕〈Q8>''’-,-,<11>,_,<12>,-,-,-,〈13>,-,-,
〈16>,-,-7030RESTORE70207040FORN=l41TO154:READDQ$:PRINTDQ$;P$(M);:NEXT
7050PRINT7060・***P4-tail
7070DATA,,〔p4-Tail〕*圏,,<18>,-,<19>,-,-,<21>、<CK>,-,-,-,
〈FD>、-.-,-,<A8〉
7080RESTORE70707090FORN=l55TO170:READEQ$:PRINTEQ$;P$(M);:NEXT
7100PRINT:PRINT 7110RETURN 5割り込み処理(*PRNCHG;7590-7830行) 出力をDisplayとPrinterとに任意に切り椿えるためのroutineである。 ↑CMDON,と入力すればPrinterに切り替わり、℃MDOFF,とすオlば りisplayに切り替わる。迅速かつ簡単に出力が切り替えられるこのroutineは、 文献10の223頁に掲載されていたもので、用途にあうため、メモリーへの書き 込み場所を変更しただけで借用した。閥3.12 -31-しかし、入力待ちの状態で上記の特殊な命令を打ち込ませるのは一般向けには 好ましくないので、本プログラムでは、入力待ちの状態でf・3キーを押せば、 この*PRNCHGroutineが呼び出され、出力先を交互に切り替えるようにし たいF3KEY、リスト2)。 さらに、この切り替えをするか否かを尋ね実行するroutine*OUT,CHG (リスト16〔7530-7580行〕)を用意し、各表示routine(集計表、棒グラ フ)の末尾でCALLしていろ〔4460,5000,5580行〕of・2キー(f・1
も)で同じ作業を繰り返せるようになっているため、Display上で確認した表示
をこの間に答えるだけで簡単にPrinterに打ち出すことができるのである。 ㈱3.12文献10の8章5節は、「PRINT/LPRINTあれこれ」と題してCALL文で呼ぶ専用routineをつくる例等が、ここで採用した「未使用コマン
ドでの切り替え」とともに紹介されていろ。随時呼び出して、切り替え可能なの
は、最後のものだけであった。(219-223頁)Ⅲ
一一一一 ・S c士鴎
Ql---
l J dr 二二1ノ 2 Ad一一二3
。d 9. 6 ⅢA 二ニリ』 e 4 o 二ニワと n Ce 二二P ・I e n -- t NⅢⅢ位
0Ⅲ記
u二e8
0 o℃m
R二・mw
E, R e R0 c幸乢、
9 0 0 gr n EF 5e二mM
肥風
a I1s h +柵O
llre
c c D r l 二t二蛇川
T NC De E7 刑 E AS二・mG
Ⅱ Ⅱ R T 0二片中
P 0 P 3 L 15 9二’1,
$7 5 1A7 二一・1 $ Ⅱ一一く
”E 0 3 T yR 十 一一 二yd N YO L一山画
I”T柵
F冊爪盛
一一・四m
TR くI S L 7二Dc
n N..0A ・1 105V Rl-
0 0Ⅱ二 T二二側
Ⅳ湖60
t卿
7 1 ・1 Ⅱ0..s0m
二三,~ u ..87$一一一一
8 $二 0 --9 6” AG0 GL0 l-一一 Ⅱ E二D EF二2二一
CT”TSIA S I剛川MM即侃肥棚卿剛M
E 2二ニ ト二二 ,,,*PLI0Fス00000100000000
リ印Ⅲ日塊田川M防侃切開的、汀
77777 77777777 -32-7715Z$=MID$(''00,00,00,7A,3E,00,00,7A''’1*3+1,2)
77ZOPOKEAD+LVAL("&H"+Z$)
7730NEXT,seg7AOO*2
7740POKEFL,1’--F1agOn
7750DATA3C,E8,F8,75,39,E8,0,,00,80,FB,BD,74,18,80,FBBF7760DATA74,ZC,E9,0A,00,89,36,EA,06,BF,0,,00,CD,C4C3,BF
7770DATAO1,00,CD,C4CB,B8,9C,15,B8,40,00,89,07,E9,07,00
7780DATABB,9C,15,33,CO,89,07,ALEA,06,A3,E8,06,F9,CB,O0
7790DATA3C,CO,74,07,釦,E8,74,07,E9,02,00,B0,AD,F8,C8.E8
7800DATAC3,FF,80,FB,BF,74,,9,80,FB,BD,74,F1,EB,Cl,90,90
7810PRINT,,Youcanusethefollowingcommands・'’
7820PRINT,,CMDON:PRINT-〉LPRINT',:
PRINT,,CMDOFF:Cancel,,:PRINT
7830RETURN ,****EndofCMDRoutine Ⅳ成果と残された課題 1成果 以上の結果、1.3.1で定めたプログラムの基本的仕様をすべて実現するこ とができた。すなわち、a.RAMDiskを原データおよび集計結果をともに扱うことで全面的に利用
し、読み出し等に要する時間を大幅に短縮し、Diskと機器の損耗を防ぐことが できた。b、当初から限定した単純項目(回答肢のうち1つだけ選択させる項
目)については、3つの項目番号を入力するだけで、当然人が行なわ なければならない選択指示する場面を除いて、自動的に処理できるよう になった〔3t)((元全方向の合計の算出、百分率の同時計算表示、集計結 果のFile化を含む〕。 c、3種類の表示を実現した。まず、クロス集計表は、第3元の任意の数値および全数値について、実数と百
一33-分率を並べて連続して表示できるようにした。印字幅の制限があるので、横軸に 定めた項目の回答肢の数が7以下のときは自動的に1行に、これを超過すると2 行に分けて表示するようにした。さらに文字サイズに変化を付けるなどして多く の情報を見やすく整理して表示することができた。