1
กลมท 1 หวขอ: SAS Language Elementsวชา: การประมวลผลขอมลเชงสถต (STATISTICAL
DATA PROCESSING)
เนอหามดงน:
SAS คออะไร? ตวเลอกของชดขอมล Formats and Informats ฟงกชนและการเรยกชดคำาสง ARM Macros คำาสง ตวเลอกระบบ SAS
SAS คออะไร? พนฐานภาษา SAS ทสนใจ
การตดตงขอมล การจดขอมลและขาวสาร ฟงกชนและการตดตงชดคำาสง -ทผเขยนขนจะมการตอบสนองตอโปรแกรม ทางเลอกของระบบ SAS
สำาหรบรายละเอยดของขอมลเกยวกบองคประกอบแตละภาษาโปรดดทการอางอง ภาษา SAS: พจนานกรม
2
ตวเลอกของชดขอมล
ความหมายตวเลอกของชดขอมล
ชดขอมลทมการระบการกระทำาทนำาไปใชกบชดขอมล SAS สามารถดำาเนนการไดดงน
การเปลยนชอตวแปร ขอสงเกต หรอ การเลอกลำาดบ (n) สำาหรบการประมวลผล ตวแปรทลดลงจากการประมวลผลหรอจากการสงออกชด
ขอมล ระบรหสผานสำาหรบชดขอมล
ไวยากรณสำาหรบชดขอมลระบตวเลอกชดขอมลในวงเลบตอทายดวย ชดขอมลชอ SAS เพอระบชดขอมลทมตวเลอกหลากหลาย โดยแยกออกจากกน
(option-1=value-1<...option-n=value-n>)
ตวอยาง การแสดงตวเลอกในชดขอมล SASdata scores(keep=team game1 game2 game3);proc print data=new(drop=year);set old(rename=(date=Start_Date));
การใชตวเลอกของชดขอมล
โดยใชตวเลอกชดขอมล SAS ทเปน INPUT หรอ OUTPUT
3
สวนใหญการตงคาของชดขอมล SAS สามารถนำาไปใชกบการปอนขอมลหรอการสงออกของชดขอมล SAS ในแตละขนตอนถาเลอกชดขอมลทมความเกยวของกบการปอนขอมล ขอมลจะถกอานถาตวเลอกทปรากฏในชดขอมลหลงจากทมการสงออกจากการกำาหนดในชดขอมลในขนตอน PROC จะมการแสดงผลชดขอมล SAS และจะตองปรากฏอยในขอความ ปจจบนอาจจะไมไดอยใน OUTPUT ใดๆ
ชดขอมลบางชดอาจมการเลอกเชน COMPRESS ซงมความหมายเฉพาะ เมอสรางชดขอมล SAS และมคณสมบตตามทชดขอมลกำาหนดการสรางชดขอมลสามารถเปลยนแปลงตวเลอกอนๆเชน (PW= and LABEL=) กบชดขอมล PROC สำาหรบขอมลเพมเตมโปรดดทคมอขนตอนของชดขอมลในฐาน SAS
เมอเลอกชดขอมลจะปรากฏใน INPUT และ OUTPUT ในขอมลชดเดยวกน หรอขนตอน PROC เลอกชดขอมล SAS ทจะปอนขอมลกอนทจะเขยนโปรแกรม หรอกอนทจะแสดงผลชดขอมล ในทำานองเดยวกน การประมวลผลชดขอมลทระบไวจะถกสรางขนหลงจากทมการใชคำาสงการเขยนโปรแกรม ตวอยางเชน เมอใช RENAME= ตวเลอกชดขอมล และชอใหมจะไมเกยวของกบตวแปรจนถงขนตอนทขอมลจะสนสดลง
ในบางกรณชดขอมลอาจมความขดแยงเมอใชคำาสงเดยวกน ตวอยางเชน (DROP= and KEEP=) ไมสามารถเลอกชดคำาสงเดยวกนได นอกจากนบางกรณสามารถใชในตอนทมปญหา ตวอยางเชน ถาใช (KEEP= and RENAME=) ชดขอมลทระบไวในคำาสง KEEP = ความตองการทจะใชชอตวแปรเดม เพราะ KEEP= เปนกระบวนการกอนทชดขอมล SAS จะถกอาน การระบชอใหม RENAME= จะนำาไปใชในการเขยนโปรแกรมทเปนไปตามคำาสง SET STATEMENT.
วธการเลอกชดขอมลในระบบ มการดำาเนนการอยางไร
4
การเลอกชดขอมลในระบบมจำานวนมากเปนขอมลทใชชอเดยวกนและฟงกชนเดยวกน การเลอกระบบสงผลใหกบขอมล ในตวอยางน การเลอกชดขอมลจะปรากฏขนโดยมการแทนทตวเลอกในระบบ BOS=OPTION STATEMENT ระบวามเพยง 100 คาสงเกตทจะไดรบการประมวลผล จากขอมลทอยภายใน SAS OBS=การเลอกชดขอมลใน STATEMENT อยางไรกตามสำาหรบการเลอกชดขอมลในระบบ จากขอมลชดทสองมเพยงหาครงทสงเกตจะอานจากขอมลชดทสอง ขนตอน PROC PRINT จะพมพขอมลชดสดทาย ขอมลชดนมหาอนดบสงเกตจากขอมลชดทสองตามดวย 100 คาทสงเกตจากขอมลชดทสามoptions obs=100;
data final; set two(obs=5) three;run;
proc print data=final; run;
ผลจากการการรนโปรแกรมNOTE: AUTOEXEC processing completed.
1 options obs=100;23 data final;4 set two(obs=5) three;ERROR: File WORK.TWO.DATA does not exist.ERROR: File WORK.THREE.DATA does not exist.5 run;
NOTE: The SAS System stopped processing this step because of errors.WARNING: The data set WORK.FINAL may be incomplete. When this step was stopped there were 0 observations and 0 variables.NOTE: DATA statement used (Total process time): real time 0.19 seconds cpu time 0.03 seconds
6
5
7 proc print data=final;8 run;
NOTE: No variables in data set WORK.FINAL.NOTE: PROCEDURE PRINT used (Total process time): real time 0.01 seconds cpu time 0.01 seconds
Formats and Informants
ความหมายของรปแบบรปแบบเปนชนดขององคประกอบภาษา SAS ทใชรปแบบหรอรนคำา
สงสำาหรบคาขอมลทจะแสดงหรอเขยนเปนเอาทพท ประเภทของรปแบบสอดคลองกบชนดขอมลของ ตวอกษร, ตวเลข, วนท, เวลาหรอการประทบเวลา ความสามารถในการสรางรปแบบทผใชกำาหนดยงสนบสนนตวอยางของรปแบบ SAS เปนไบนาร, วนท, และคำาพด ตวอยางเชน WORDS22 รปแบบซงจะแปลงคาตวเลขทเทยบเทาของพวกเขาในคำาพดเขยนคาตวเลข 692 เปน six hundred ninety-two.วากยสมพนธ
ไวยกรณ Formats SASไวยกรณ Formats SAS มตอไปน:<$> formats< w > . < d >
$ แสดงใหเหนรปแบบตวอกษร ขาดมนเปนการแสดงใหเหนรปแบบทเปนตวเลข
จดรปแบบ ชอรปแบบ รปแบบทเปนรปแบบ SAS หรอรปแบบทผใชกำาหนดทถกกำาหนดไวกอนหนาดวยคำาสงในรปแบบ PROC สำาหรบขอมลเกยวกบผใชกำาหนดรปแบบใหดทขนตอนการจดรปแบบในคมอฐาน SAS
6
w ระบความกวางของรปแบบ ซงรปแบบมากทสดคอจำานวนของคอลมนในผลลพธของขอมล
d ระบปจจยทเลอกทศนยมในรปแบบทเปนตวเลขรปแบบทมกจะประกอบดวยรอบระยะเวลา (.) เปนสวนหนงของ
ชอ ถาคณละเวน w และ d คาจากรปแบบ SAS ใชคาเรมตน d คาทคณระบมรปแบบทบอก SAS เพอแสดงตำาแหนงทศนยมทมจำานวนมาก รปแบบทไมเคยเปลยนแปลงหรอตดเกบไวภายในคาขอมล ตวอยางเชนใน DOLLAR10.2 คา w จาก 10 ระบสงสด 10 คอลมน สำาหรบคา d จาก 2 ระบวาทงสองคอลมนนเปนสวนทศนยมของคาซงใบแปดคอลมนสำาหรบทกตวอกษรทเหลออยในคา คอลมนทเหลอรวมจดทศนยมคาตวเลขทเหลอเครองหมายลบถาคาเปนลบเครองหมายดอลลารและเครองหมายจลภาค
ถารปแบบความกวางแคบเกนไปทจะเปนตวแทนของคา SAS จะพยายามทบบคาลงในพนทวาง รปแบบตวอกษรตดทอนคาทางดานขวา รปแบบตวเลขบางครงกลบไปทดทสดของ WD รปแบบ SAS พมพเครองหมายดอกจนถาคณไมไดระบความกวางเพยงพอ ในตวอยางตอไปนผลทไดคอ x = **
x = 123;put x = 2.;
ถาคณใชรปแบบทไมถกตอง เชน การใชรปแบบตวเลขในการเขยนตวอกษรโปรแกรม SAS จะพยายามใชรปแบบคลายกบประเภทอนๆ หากเกดขอผดพลาดโปรแกรม SAS จะอธบายถงปญหาทเกดขน
วธในการระบ Formatsคณสามารถใช Formats ในรปไดดงตอไปน:
ในรายงาน PUT
7
จะพมพคำาสง PUT หลงจากทชอตวแปรจะใชรปแบบการเขยนคาของขอมล ตวอยางเชน DOLLAR w. d รปแบบการเขยนคาตวเลขสำาหรบจำานวนเงนทเปนจำานวนเงน
amount=1145.32;put amount dollar10.2;
DOLLAR w. d ในรปแบบคำาสง PUT จะไดผลดงน$ 1,145.32
ดขอมลเพมเตมไดท PUT ฟงกชน : พจนานกรมสำาหรบขอมลเพมเตม ฟงกชน PUT, PUTC หรอ PUTN
ฟงกชนแปลง PUT ตวแปรทเปนตวเลข ตวอกษร ตวแปร หรอคาคงทใด ๆ โดยใชรปแบบทถกตองและสงผลในรปคาตวอกษร ตวอยางเชนคำาสงตอไปน แปลงคาของตวแปรทเปนตวเลขในการแทนเลขฐานสบหกสองตวอกษร
num=15; char=put(num, hex2.);
ฟงกชน PUT สงกลบคาของ 0F ซงมการกำาหนดคาใหกบตวแปรฟงกชน PUT จะเปนประโยชนสำาหรบการแปลงคาตวเลขใหกบคาตวอกษรสำาหรบขอมลเพมเตมโปรดดท PUT ฟงกชน ในฟงกชนและ SAS การปฏบต CALL ขอมลอางอง
ฟงกชน % SYSFUNC มาโครSYSFUNC% (หรอ QSYSFUNC %) ฟงกชนแมโครดำาเนนการโดย
SAS หรอทผใชกำาหนดฟงกชนและใชรปแบบตวเลอกเพอผลของการทำางานนอกขนตอน ตวอยางเชนโปรแกรมตอไปเขยนคาตวเลขในตวแปรแมโครเปนจำานวนเงน
%macro tst(amount);%put %sysfunc(putn(&amount,dollar10.2));
8
%mend tst;%tst (1154.23);
สำาหรบขอมลเพมเตมโปรดดท SYSFUNC% และฟงกชน QSYSFUNC% ในภาษา SAS มาโคร: อางอง
คำาสงรปแบบในขนตอนของขอมลหรอขนตอน PROCรปแบบคำาสงทรวมทงตวแปรตวอกษรทมรปแบบตวอกษรและ
ตวแปรทเปนตวเลขทมรปแบบทเปนตวเลข SAS จะใชรปแบบการเขยนคาของตวแปรทคณระบ ตวอยางเชนคำาสงตอไปน ในขนตอนขอมลรวมจลภาค w . d รปแบบตวเลขกบตวแปร SALES1 ผาน SALES3
format sales1-sales3 comma10.2; หมายเหต : ถาคณกำาหนดรปแบบดวยกบคำาสงรปแบบกอนทจะสง PUT ทกชองวางนำากำาลงตด รปแบบทเกยวของกบตวแปรโดยใชคำาสง FORMAT ปรบปรงในคำาสง PUT ทตามมา สำาหรบรายละเอยดเกยวกบการใชการปรบปรงรปแบบด PUT คำาชแจงรายการ ในรายงาน SAS ขอมลอางอง
ในคำาสง attrib ในขนตอนของขอมลหรอขนตอน PROC คำาสง attrib ยงสามารถเชอมโยงรปแบบเชนเดยวกบคณสมบตอนๆ
ทมหนงหรอมากกวาหนงตวแปร ตวอยางเชนในคำาสงตอไป รายงาน attrib โดย w.d รปแบบกบตวแปร SALES1 ผาน SALES3
attrib sales1-sales3 format=comma10.2;เพราะคำาสง attrib รวมงานอยางถาวรในรปแบบทมตวแปรขนตอน
ขอมลใด ๆ ทตามมาหรอ PROC ขนตอนทใชในการเขยน COMMA10.2 คาของ SALES1, SALES2 และ SALES3 สำาหรบขอมลเพมเตมโปรดดทคำาชแจง attrib ในรายงาน SAS ขอมลอางอง
สมาคมถาวรกบชวคราว
9
เมอคณระบรปแบบในคำาสง PUT SAS จะใชรปแบบการเขยนคาของขอมลในระหวางขนตอนขอมล แตไมไดอยางถาวรเชอมโยงรปแบบทมตวแปร อยางถาวรเชอมโยงรปแบบทมตวแปรใชคำาสงรปแบบหรอคำาสง attrib ในขนตอนขอมล SAS รวมงานอยางถาวรในรปแบบทมตวแปรโดยการปรบเปลยนขอมลทบงชในชดขอมล SAS
ใชคำาสงรปแบบหรอคำาสง attrib ในขนตอน PROC รปแบบทมตวแปรสำาหรบ ขนตอน PROC นนเชนเดยวกบขอมลใด ๆ ทเอาทพทชดวาขนตอนการสรางทมตวแปรทจดรปแบบ สำาหรบขอมลเพมเตมเกยวกบการใชรปแบบในขนตอน SAS ด คาทจดรปแบบ ในฐาน SAS ขนตอนคมอ
Informatsความหมายของ Informats
informat เปนชนดขององคประกอบภาษา SAS ทใชรปแบบหรอรนคำาสงสำาหรบคาขอมลทจะอานเปน input ประเภท informats สอดคลองกบชนดขอมลของตวอกษร, ตวเลข, วนท, เวลาหรอการประทบเวลาความสามารถในการสรางผใชกำาหนด informats ยงสนบสนน ตวอยางของ informats SAS เปนวนท, ไบนาร และจลภาค ตวอยางเชนคาตอไปนมเครองหมายดอลลารและจลภาค
$ 1,000,000ในการลบเครองหมายดอลลาร ($) และเครองหมายจลภาค (,) กอนทการจดเกบคาตวเลขในตวแปร 1000000 อานคานดวย COMMA11 informat ถาคณกำาหนดตวแปรแรก SAS ใช informat เพอตรวจสอบวาตวแปรเปนตวเลขหรอตวอกษร SAS ยงใช informat เพอกำาหนดความยาวของตวแปรตวอกษรไวยกรณ Informat SASไวยกรณ Informat SAS มตอไปน:<$> informat < w >. < d >
10
$ ใชอานขอมลทเปนตวอกษรInformat ชอ informat เปน SAS informat หรอ
informat กำาหนดโดยผใชทถกกำาหนดไวกอนหนาดวยกบคำาสง invalue ในรปแบบ PROC รปแบบขนตอน ในฐาน SAS ขนตอนคมอ
w ระบความกวาง informat ซง informats มากทสดคอจำานวนของคอลมนในการปอนขอมล
d ระบปจจยทปรบตวเลอกทศนยมใน informats ตวเลข SAS แบงการปอนขอมลโดยมากทสด 10 คาของ d
หมายเหต : แมวา SAS สามารถอานไดถง 32 หลกเมอคณระบ informats ตวเลขบางตวเลขทมมากกวา 15 หลกอยางมนยสำาคญอาจสญเสยความแมนยำาเนองจากขอ จำากด ของแปดไบตแทนทศนยมโดยใชคอมพวเตอรสวนใหญ
Informats ประกอบดวยรอบระยะเวลา (.) เปนสวนหนงของชอ ถาคณละเวน w และ d คาจาก informat SAS ใชคาเรมตน หากขอมลทมจดทศนยม SAS ละเวน d มลคาและอานจำานวนตำาแหนงทศนยมทเปนจรงในการปอนขอมล
ถาความกวาง informat แคบเกนไปทจะอานคอลมนทงหมดในการปอนขอมลคณอาจไดรบผลลพธทไมคาดคด ปญหาทมกเกดขนกบ informats วนทและเวลา คณตองปรบความกวางของ informat จะรวมถงชองวางหรออกขระพเศษระหวางวนเดอนปหรอเวลาสำาหรบขอมลเพมเตมเกยวกบคาวนทและเวลา ดวนทเวลาและชวงเวลาในการอางอง SAS
เมอปญหาเกดขนกบ informat SAS เขยนบนทกลงในบนทก SAS และกำาหนดคาทหายไปใหกบตวแปร ปญหาทเกดขนถาคณใช informat เขากนไมไดเชน informat ตวเลขการอานขอมลตวอกษรหรอถาคณระบความกวางของ informat วนทและเวลาททำาให SAS การอานอกขระพเศษในคอลมนสดทาย
11
วธในการระบ Informatsคณสามารถใช Informats ในรปไดดงตอไปน:
ในคำาสง INPUT
คำาสง INPUT กบ informat หลงชอตวแปรเปนวธทงายทสดในการอานคาเปนตวแปร ตวอยางเชนคำาสง INPUT ตอไปนใชสอง informats input @15 style $3. @21 price 5.2;
$ w. informat ตวอกษรทอานคาลงสไตลตวแปร w . d ตวเลข informat อานคาลงราคาตวแปลสำาหรบการอภปรายทสมบรณของคำาสง INPUT ใหด คำาชแจง INPUT ในรายงาน SAS ขอมลอางอง
ดวย INPUT, INPUTC และฟงกชน INPUTN
SAS ใช informat ระบ informat กำาหนดวาคาผลลพธเปนตวเลขหรอตวอกษร ดงนนฟงกชน Input เปนประโยชนสำาหรบการแปลงขอมล ตวอยางเชน
TempCharacter = 0.6 '98 ';TemperatureNumber = INPUT (TempCharacter, 4.);
ทนฟงกชน INPUT รวมกบ w . d informat แปลงคาตวอกษรของ TempCharacter เปนคาตวเลขและกำาหนดคาตวเลขท 98.6 TemperatureNumber
ใชฟงกชน PUT กบรปแบบ SAS การแปลงคาตวเลขเปนคาตว สำาหรบตวอยางของตวเลขเพอการแปลงตวอกษรด PUT ฟงกชน ในฟงกชนและ SAS การปฏบต CALL ขอมลอางอง
ในรายงาน informat ในขนตอนของขอมลหรอขนตอน PROC
12
informat กบตวแปร SAS ใช informat ในคำาสง INPUT ภายหลงจากการอานคาเปนตวแปร ตวอยางเชนในคำาสงตอไปน
informat Birthdate Interview date9.;input @63 Birthdate Interview;
informat ทเกยวของกบคำาสง informat พฤตกรรม ในคำาสง INPUT สำาหรบรายละเอยดเกยวกบการใช ปรบปรงใหดท คำาชแจง INPUT รายการ ในรายงาน SAS ขอมลอางอง ดงนน SAS ใชการปอนขอมลรายการแกไขการอานตวแปรเพอให
o w คาใน informat ไมไดกำาหนดตำาแหนงคอลมนหรอความกวางของชองใสในแฟมภายนอกชองวางทฝงอยในการปอนขอมลจะถอวาเปนตวคนนอกจากคณจะเปลยนหรอ DLM = DLMSTR = ตวเลอกในรายงาน INFILE
o สำาหรบ informats ตวอกษร w คาใน informat ระบความยาวของตวแปรตวอกษร
o สำาหรบ informats ตวเลข w คาจะถกละเวนo สำาหรบ informats ตวเลข d คาใน informat จะทำางานในลกษณะ
ปกตสำาหรบ informats ตวเลข
หากคณมรหสคำาสง INPUT จะใชรปแบบหนงของการปอนขอมลดงกลาวเปนขอมลทจดรปแบบการปอนขอมลหรอคอลมนรปแบบของการปอนขอมลทไมไดใชเมอคณใชคำาสง informatดคำาชแจง INPUT รายการในรายงาน SAS ขอมลอางองสำาหรบขอมลเพมเตมเกยวกบวธการใชการปอนขอมลรายการแกไขเพออานขอมลหมายเหต : แฟมขอความทมตนกำาเนดมาจากทใดกไดทนอกเหนอจากสภาพแวดลอมในการเขารหสในประเทศใดๆ กอาจจะจำาเปนทจะตองระบการเขารหสตวเลอก = ในสภาพแวดลอมท ASCII หรอ EBCDIC อยางใดอยางหนง ตวอยางเชนเมอคณอานไฟลขอความบนแพลตฟอรม
13
EBCDIC ASCII กจะแนะนำาวาคณระบการเขารหสตวเลอก = ในชอไฟลหรอขอความ INFILE แตถาคณใช DSD และ DLM = DLMSTR หรอตวเลอก = ในชอไฟลหรอขอความ INFILE การเขารหส = ตวเลอกเปนสงจำาเปนเพราะตวเลอกเหลานจำาเปนตองมตวอกษรบางอยางในเซสชนการเขารหส (เชนอญประกาศเครองหมายจลภาคและชองวาง) . ใช informats การเขารหสเฉพาะควรจะสงวนไวสำาหรบใชกบแฟมไบนารจรง นนคอพวกเขามตวละครทงสองและสาขาทไมไดตว
ในคำาสง attrib ในขนตอนของขอมลหรอขนตอน PROCคำาสง attrib ยงสามารถเชอมโยง informat เชนเดยวกบคณสมบต
อน ๆ ทมหนงหรอมากกวาหนงตวแปร ตวอยางเชนในงบดงตอไปน
attrib Birthdate Interview informat=date9.;input @63 Birthdate Interview;informat ทเกยวของโดยใชตวเลอก informat = ในคำาสง attrib
พฤตกรรมเชน informat ในคำาสง INPUT สำาหรบรายละเอยดเกยวกบการใช ด คำาชแจง INPUT, รายการในรายงาน SAS ขอมลอางอง ดงนน SAS ใชการปอนขอมลรายการแกไขการอานตวแปรในลกษณะเดยวกบทมนไมสำาหรบรายงาน informat
สำาหรบขอมลเพมเตมโปรดดท คำาชแจง attrib ในรายงาน SAS ขอมลอางอง
สมาคมถาวรกบชวคราวเมอคณระบ informat ในคำาสง INPUT, SAS ใช informat การ
อานคาการปอนขอมลในระหวางขนตอนขอมลท SAS แตไมไดเชอมโยง informat กบตวแปร อยางถาวรเชอมโยง informat กบตวแปร informat ใชคำาสงหรอคำาสง attrib SAS รวมอยางถาวร informat กบตวแปรโดยการปรบเปลยนขอมลทบอกในชดขอมล SAS
14
Informats ผใชกำาหนดเองนอกจาก informats ทจะมาพรอมกบฐาน SAS ซอฟตแวรทคณ
สามารถสราง informats ของคณเอง ในฐาน SAS ซอฟแวรรปแบบ PROC ชวยใหคณสราง informats ของคณเองและรปแบบสำาหรบตวละครทงสองและตวแปรทเปนตวเลขสำาหรบขอมลเพมเตมเกยวกบการทผใชกำาหนด informats ดขนตอนการจดรปแบบในฐาน SAS
เมอคณรนโปรแกรม SAS ทใชทผใชกำาหนด informats เหลานควรจะสามารถใชได สองวธทจะทำาให informats เหลานทมอย
เพอสราง informats ถาวรไมไดชวคราวทมรปแบบ PROC ในการจดเกบซอรสโคดทสราง informats (รปแบบขน PROC)
กบโปรแกรม SAS ทใชพวกเขาถาคณรนโปรแกรมทไมสามารถหา informat ทผใชกำาหนดผลทตามมาขนอยกบการตงคาตวเลอก FMTERR ระบบ
ตวเลอกระบบ ผลFMTERR SAS หยดการเกดขอผดพลาดททำาใหขอมลทเปน
ปจจบนหรอขนตอน PROCNOFMTERR SAS ยงคงการประมวลผลโดยการแทนคาเรมตน
informat
แมวาการใช NOFMTERR ชวยใหเอสเอในการประมวลผลตวแปรทคณสญเสยขอมลทผใชกำาหนดอปกรณ informat ตวเลอกนสามารถกอใหเกดขนตอนทขอมลขอมลทอานผดและมนสามารถใหผลลพธทไมถกตอง สำาหรบขอมลเพมเตมโปรดดทตวเลอกระบบ FMTERR ใน SAS ตวเลอกระบบ: การอางอง.
15
เพอหลกเลยงปญหาใหแนใจวาผใชของโปรแกรมของคณสามารถเขาถงทก informats ทผใชกำาหนดวาจะม
การใชByte สงซอสำาหรบขอมลไบนารจำานวนเตมเกยวกบ Big Endian และ Little Endian Platformsคำาจำากดความ
คาจำานวนเตมสำาหรบขอมลไบนารจำานวนเตมจะถกเกบไวมกจะอยในหนงในสามของขนาดหนงไบตสองไบตหรอสไบต การสงซอของไบตสำาหรบจำานวนเตมแตกตางกนไปขนอยกบแพลตฟอรม (สภาพแวดลอมการทำางาน)
การสงซอของไบตมความแตกตางระหวาง " big endian " และ "little
endian" แพลตฟอรม เงอนไขเหลานเปนภาษาทใชในการอธบายการสงซอไบตสำาหรบเมนเฟรมของไอบเอม (big endian) และสำาหรบแพลตฟอรม Intel-based (little endian) ในระบบ SAS แพลตฟอรมตอไปนจะมการพจารณาใหญ endian เมนเฟรม IBM, HP-UX, AIX, Solaris เมอ SPARC, และ Macintosh ใน SAS แพลตฟอรมตอไปนจะมการพจารณา little endian Intel ABI, Linux, OpenVMS อลฟา Integrity OpenVMS, Solaris บน x64, Tru64 ยนกซและ Windows
วธ Bytes ไดรบคำาสงบนแพลตฟอรม endian ใหญ 1 คาทถกเกบไวในไบนารและตวแทน
ทนในเลขฐานสบหก หนงไบตจะถกเกบเปน 01 สองไบตเปน 00 01 และสไบตเปน 00 00 00 01 บนแพลตฟอรม endian นอย 1 คาทถกเกบไวในหนงไบตเปน 01 (เชนเดยวกบใหญ endian) ในไบตทสองเปน 01 00 และในไบตทสเปน 01 00 00 00
16
ถาจำานวนเตมมคาเปนลบ "สองของสวนประกอบ" แทนถกนำามาใช บตลำาดบสงของไบตทสำาคญทสดของจำานวนเตมจะถกตงคาบน ตวอยางเชน -2 จะแสดงในหนงสองและสไบตบนแพลตฟอรม endian ใหญเปน FE, FF FE และ FF FF FF FE ตามลำาดบ บนแพลตฟอรม endian เลก ๆ นอย ๆ แทนจะ FE, FE FF และ FE FF FF FF เหลานสงผลเปนตวแทนจากการสงออกของคาไบนารจำานวนเตม -2 แสดงออกในการแสดงเลขฐานสบหก
การอานขอมลทสรางขนบนแพลตฟอรมบก Endian Endian หรอลตเตล SAS สามารถอานจำานวนเตมการลงนามและลงนามโดยไมคำานงวาพวกเขาจะถกสรางขนบน endian ใหญหรอระบบ endian นอย ในทำานองเดยวกน SAS สามารถเขยนและลงนามจำานวนเตมไมไดลงนามทงในรปแบบ endian ใหญ endian และนอย ความยาวของจำานวนเตมเหลานสามารถมไดถงแปดไบต
ตารางตอไปนแสดงใหเหนซง informat ทจะใชสำาหรบชดตางๆของแพลตฟอรมในระบบ คอลมน ไม ชใหเหนวาเปนจำานวนทไมไดลงชอและ“ ”ไมสามารถลบ "ใช" แสดงวาจำานวนสามารถเปนไดทงลบหรอบวก
SAS Formats and Byte Ordering แพลตฟอรมสำาหรบการขอมลทไดสรางไว
แพลตฟอรมขอมลทจะอานตอไป
จำานวนเตมลง นาม
informat
big endian big endian ใช IB or S370FIB
big endian big endian ไม PIB, S370FPIB, S370FIBU
big endian little endian ใช S370FIBbig endian little endian ไม PIBR
17
little endian big endian ใช IBRlittle endian big endian ไม PIBRlittle endian little endian ใช S370FIBlittle endian little endian ม PIB หรอ
PIBRbig endian Either ใช S370FIBbig endian Either ไม S370FPIBlittle endian Either ใช IBRlittle endian Either ไม PIBR
ตารางตอไปนเปรยบเทยบสญกรณไบนารจำานวนเตมตามภาษาโปรแกรม
ภาษา 2 ไบตหรอระบบ 8 บต
4 ไบตหรอระบบ 16 บต
8 ไบตหรอระบบ 64 บต
SAS IB2., IBR2., PIB2., PIBR2., S370FIB2., S370FIBU2., S370FPIB2.
IB4., IBR4., PIB4., PIBR4., S370FIB4., S370FIBU4., S370FPIB4.
IB8., IBR8., PIB8., PIBR8., S370FIB8., S370FIBU8., S370FPIB8.
PL/I BIN ถาวร (15) BIN ถาวร (31) BIN ถาวร (63)FORTRAN จำานวนเตม*2 จำานวนเตม*4 จำานวนเตม*8COBOL COMP PIC
9(4)COMP PIC 9(8) COMP PIC
9(16)IBM assembler
H F FD
18
C สน int นาน
การทำางานรมกนระหวาง Packed Decimal and Zoned Decimal Data คำาจำากดความ
Packed decimal ระบวธการเขารหสตวเลขทศนยมโดยใชแตละไบตจะเปนตวแทนของตวเลขสองหลกทศนยม แทนทศนยมเกบขอมลทศนยมทมความแมนยำาแนนอน สวนทเปนเศษสวนของจำานวนจะถกกำาหนดโดย informat หรอรปแบบเพราะไมมแยก mantissa และตวแทน
ประโยชนของการใชขอมลทศนยมบรรจคอความแมนยำาแนนอนสามารถรกษา แตการคำานวณทเกยวของกบขอมลทศนยมอาจจะกลายเปนไมแนนอนเกดจากการขาดคำาแนะนำาพนเมอง
Zoned decimal ระบวธการเขารหสตวเลขทศนยมซงแตละหลกตองมหนงไบตในการจดเกบ byte สดทายมเครองหมายตวเลขทเปนตวเลขหลกสดทาย
Nibble ระบ 1/2 ของไบต
ประเภทของขอมลPacked decimal แทนทศนยมบรรจเกบตวเลขทศนยมในแตละ
"ตอด" ของไบต แตละ byte มสอง Nibbles และแทะแตละจะแสดงเปนตวอกษรฐานสบหก ตวอยางเชน 15 คาทถกเกบไวในสอง Nibbles ใชอกขระเลขฐานสบหกท 1 และ 5
บงชสญญาณจะขนอยกบสภาพแวดลอมการทำางานของคณ เมอไอบเอม mainframes ปายจะแสดงโดยแทะลาสด ทมรปแบบ C หมายถงคาบวก และ D หมายถงคาลบ ดวย informats, A, C, E, F และระบคาเปนบวกและ B และ D ระบคาลบใดๆ และอนๆไมถกตองสำาหรบลงนาม
19
ขอมลทศนยมบรรจ ในทกสภาพแวดลอมการปฏบตการอนๆ สญญาณจะแสดงในไบตของตวเอง ถาบตลำาดบสงเปน 1 แลวจำานวนเปนลบมฉะนนจะเปนบวก
การแสดงขอมลทศนยม
คณสามารถใชรปแบบ S370FPD บนแพลตฟอรมทงหมดทจะไดรบการตงคาเครองคอมพวเตอรเมนเฟรมของไอบเอม
คณสามารถมขอมลทบรรจลงนามดวยตวบงชไมมวแวว รปแบบทศนยมบรรจและ informat จดการแทน มนมความสอดคลองระหวางแพลตฟอรม ASCII และ EBCDIC
โปรดทราบวารปแบบ S370FPDU และ informat คาดวาจะม F ในแทะลาสดขณะทศนยมบรรจคาดวาไมมสญญาณตอด
Zoned decimal การแสดงขอมลทศนยม
แทนทศนยมโลโกเกบทศนยมหลกในการสงซอแทะตำาของแตละ byte แตสำาหรบไบตทมปาย, แทะสงสนเปนตวเลขโซนแทะ (F เมอ EBCDIC และ 3 เมอ ASCII)
สญญาณทสามารถผสานเปนไบตทมหลกหรอสามารถจะแยกขนอยกบการเปนตวแทน แตรปแบบทศนยมมาตรฐานโลโกและ informat คาดวาสญญาณทจะรวมเขาเปน byte สดทาย
EBCDIC และ ASCII รปแบบทศนยมโลโกผลตแทนพมพเดยวกนตวเลข มสอง Nibbles ตอ byte แตละแสดงโดยตวอกษรฐานสบหก ตวอยางเชน 15 คาทถกเกบไวในไบตทสอง ไบตแรกม F1 คาเลขฐานสบหกและไบตทสองมคาฐานสบหก C5
20
Packed Julian Dates ทงสองรปแบบและ informats ทจดการวนทจเลยนในการเปน
ตวแทนทศนยมบรรจเปน PDJULI และ PDJULG PDJULI ใชการคำานวณของไอบเอมเมนเฟรมปขณะท PDJULG ใชเกรกอเรยนการคำานวณ
การคำานวณเมนเฟรมของไอบเอมคดวา 1900 จะเปนปฐานและคาปในขอมลทบงชชดเชยจาก 1900 ตวอยางเชน 98 หมายถงป 1998 100 หมายความ 2000 และ 102 หมายถง 2002 1998 จะหมายถง 3898
การคำานวณเพอชวยใหเกรกอเรยนป 2 หลกหรอ 4 หลก ถาคณใชป 2 หลก SAS ใชการตงคาของ YEARCUTOFF ตวเลอกระบบเพอตรวจสอบปจรง
แพลตฟอรมทสนบสนน Packed Decimal and Zoned Decimal Data
แพลตฟอรมบางคนมคำาแนะนำาพนเมองเพอสนบสนนขอมลทศนยมบรรจและโลโกขณะทคนอนตองใชซอฟแวรทจะเลยนแบบการคำานวณ ตวอยางเชนเมนเฟรมของไอบเอมมการเรยนการสอนแพคเพมเพอเพมขอมลทศนยมบรรจ แตแพลตฟอรมทใช Intel ไมมการเรยนการสอนดงกลาวและตองแปลงขอมลทศนยมในรปแบบอน ๆ บาง
ภาษาทสนบสนนบรรจกลองทศนยมและโลโกขอมลทศนยมหลายภาษาทรองรบการบรรจทศนยมและโลโกขอมลทศนยม ตาราง
ตอไปนแสดงใหเหนวาภาษาโคบอลเบดเตลดภาพทสอดคลองกบรปแบบ SAS และ informats
21
IBM VS ขอ COBOL II รปแบบทสอดคลองกนและ S370Fxxx Informats
PIC S9(X)บรรจทศนยม S370FPDw.PIC S9(X)บรรจทศนยม S370FPDUw.PIC S9(W) แสดง S370FZDw.PIC S9(W) แสดง S370FPDUw.เขาสระบบ PIC S9(W) แสดงทสำาคญ
S370FZDLw.
เขาสระบบ PIC S9(W) แสดง ทสำาคญเฉพาะกจ
S370FZDSw.
เขาสระบบ PIC S9(W)แสดงเฉพาะกจ
S370FZDTw.
สำาหรบการเปนตวแทนทศนยมบรรจระบไวขางตน X ระบจำานวนของตวเลขทเปนตวแทนและ W มจำานวนไบต สำาหรบ PIC S9 (X) บรรจทศนยม W มceil ((x 1) / 2) . สำาหรบ PIC 9 (X) บรรจทศนยม W มceil (x / 2) . ตวอยางเชน PIC S9 (5) บรรจทศนยมเปนตวเลขหาหลก ถาสญญาณรวม Nibbles หกมความจำาเปน ceil ((5 +1) / 2) มความยาวสามไบตและความคมคาของ W คอ 3
โปรดทราบวาคณสามารถใชแทน COMP-3 สำาหรบบรรจทศนยม ไอบเอมในภาษาประกอบ สง P บงชทศนยมบรรจและคำาสง Z บงชทศนยมโลโก ตอไปนแสดงใหเหนถงขอความทตดตอนมาจากรายการของภาษาประกอบแสดงใหเหนถงการชดเชย
offset value (in hex) inst label directive
+000000 00001C 2 PEX1 DC PL3'1' +000003 00001D 3 PEX2 DC PL3'-1'+000006 F0F0C1 4 ZEX1 DC
ZL3'1'
22
+000009 F0F0D1 5 ZEX2 DC ZL3'1'
ใน PL / I, แอตทรบวตทศนยมถาวรถกนำามาใชรวมกบขอมลทศนยมบรรจ คณตองใชสเปคภาพทจะเปนตวแทนขอมลทศนยมโลโก ไมมการแสดงมาตรฐานของขอมลทศนยมสำาหรบ Fortran หรอภาษา C สรปสาระสำาคญของบรรจกลองรปแบบทศนยมทศนยมและโลโกและ Informats
SAS ใชกลมของรปแบบและ informats ในการจดการขอมลทศนยมบรรจและโลโก ตารางตอไปนแสดงชนดของการแสดงขอมลสำาหรบรปแบบเหลานและ informats โปรดทราบวารปแบบและ informats ทขนตนดวย S370 หมายถงการเปนตวแทนเมนเฟรมของไอบเอม
จดรปแบบ
ชนดของขอมล
Informat ทสอดคลองกน
ความเหน
PD ทศนยมบรรจกลอง
PD ทองถนลงสนามทศนยมบรรจ
PK ทศนยมบรรจกลอง
PK ทศนยมบรรจนรนาม; ไมใชเฉพาะกบสภาพแวดลอมการทำางานของคณ
ZD ทศนยมโลโก ZD ทศนยมโลโกทอฝถนไม ทศนยมโลโก ZDB แปล EBCDIC วาง (x'40
') เพอ EBCDIC ศนย (x'F0') แลวสอดคลองกบ informat ทศนยมโลโก
ไม ทศนยมโลโก ZDV ไมไอบเอมโลโกทศนยมS370FPD
ทศนยมบรรจกลอง
S370FPD ลาสดแทะ C (บวก) หรอ D (ลบ)
S370F ทศนยม S370FPDU แทะลาสดเสมอ F(บวก)
23
PDU บรรจกลองจดรปแบบ
ชนดของขอมล
Informat ทสอดคลองกน
ความเหน
S370FZD
ทศนยมโลโก S370FZD ไบตลาสดมสญญาณในแทะบน: C
(บวก) หรอ D (ลบ)S370FZDU
ทศนยมโลโก S370FZDU ตอดปาย F:นรนาม
S370FZDL
ทศนยมโลโก S370FZDL ลงชอเขาสระบบแทะในไบตแรกใน informat; ไบตปายแยกชนนำาของ x'C0 '(บวก) หรอ x'D0' (ลบ) ในรปแบบ
S370FZDS
ทศนยมโลโก S370FZDS ปายชนนำาของ-(x’60’)หรอ(x’4t')
S370FZDT
ทศนยมโลโก S370FZDT ปายทายของ - (x'60 ') หรอ (x'4E')
PDJULI ทศนยมบรรจกลอง
PDJULI วนทจเลยนในการเปนตวแทนบรรจไอบเอมคำานวณ
PDJULG
ทศนยมบรรจกลอง
PDJULG วนทจเลยนในการเปนตวแทนบรรจ เกรกอเรยน–การคำานวณ
ไม ทศนยมบรรจกลอง
RMFDUR รปแบบอนพต คอ : mmssttt F
ไม ทศนยมบรรจกลอง
SHRSTAMP รปแบบอนพตคอ: yyyyddd F
24
hhmmssth ทyyyyddd F เปนวนทจเลยนบรรจ; ปเปนปท 0 ตามจาก 1900
ไม ทศนยมบรรจกลอง
SMFSTAMP
รปแบบอนพต คอ : xxxxxxxxyyyyddd F ท yyyy ddd F เปนวนทจเลยนบรรจ;ปเปน 0 ตาม จาก 1900
ไม ทศนยมบรรจกลอง
PDTIME รปแบบอนพตคอ: 0 HHMMSS F
การแปลงขอมลและการเขารหส
การเขารหสอกขระแตละตวในลกษณะการตงคาการแสดงตวเลขทไมซำากน มผลในตารางของจดรหสทงหมด มการแสดงตวเลขทแตกตางกนในการเขารหสทแตกตางกน ตวอยางเชนการเขารหส ASCII สำาหรบ สญลกษณ ดอลลา $ คอ 24hex การเขารหส EBCDIC เดนมารก สญลกษณ ดอลลา$ คอ 67hex ใน การสงซอสำาหรบ SAS ทปกต ใช ASCII ทจะถก แปลความหมายของชด ขอมลท มการเขารหสใน Danish
25
EBCDIC ขอมลจะตองถกแปลงเปนกระบวนการของการยายขอมลจากทหนงไปยงอกทหนง การเขารหส เมอแปลงเครองหมายดอลลารASCII ถง
เครองหมายดอลลาร Danish EBCDIC แทน เลขฐานสบหก สำาหรบ ตวอกษร ทถกแปลง จาก 24 คาไป 67
ขนตอนการเขารหสของโดยเฉพาะอยางยง ชด ขอมล SAS คอสำาหรบ SAS 9 และ ขางตน
1. คนหาขอมลทตง SAS
2. คลกขวาทชดขอมล
3. คณสมบตจากเมน
4. ทแทบรายละเอยด
5. เขารหสของขอมลทกำาหนดอยในรายการ พรอมกบขอมล อน ๆ
6. บางสถานการณทขอมลอาจจะถกแปลง โดยทวไป มดงน
1. เมอคณแบงปนขอมลระหวางสองชวง SAS ทแตกตางกนทกำาลงทำางานในสถานท แตกตางกนหรอ ในสภาพแวดลอมการดำาเนนงานทแตกตางกน
2. เมอคณดำาเนนการ เชนการแปลง เปนตวพมพใหญ หรอ ตวพมพเลก
3. เมอคณแสดงหรอพมพ ตวอกษรจาก ภาษาอน
4. เมอคณคดลอก และวางขอมลระหวางการทำางานในสถานททแตกตางกนสำาหรบ ขอมลเพมเตมเกยวกบ SAS คณสมบตทออกแบบมาเพอ
จดการกบการแปลงขอมลจากการเขารหสทแตกตางกนหรอสภาพ
26
แวดลอมในการดำาเนนงาน ด SAS สนบสนน ภาษา แหงชาต ( NLS ) : คมอการใชงาน
ฟงกชนและการเรยกชดคำาสง
ความหมายของฟงกชนและการเรยกชดคำาสงความหมายของฟงกชน
ฟงกชนของ SAS ดำาเนนการคำานวณหรอการจดการระบบในขอขดแยงและสงกลบคา การทำางานสวนใหญใชขอขดแยงของผใชงาน แตมจำานวนผใชไมมากทไดรบจากสภาพแวดลอมการทำางานในซอฟแวรฐาน SAS คณสามารถใชฟงกชนของ SAS ในขนตอนการสรางขอมล ในการสงผานขอมลของ WHERE ในภาษาทผใชเขยนขนเอง ใน PROC REPORT และในโครงสรางภาษาตอบคำาถาม (SQL)บางขนตอนทางสถตใชฟงกชนของ SAS ดวย และมากกวานน SAS ซอฟแวรอนทสามารถใชในขนตอนการสรางขอมล อางถงการเตรยมเอกสารทเปนของ SAS ซอฟแวร ทใชในขอมลเพมเตมของฟงกชนเหลานความหมายของการเรยกชดคำาสงการเรยกชดคำาสงปรบเปลยนคาของตวแปรหรอสรางระบบฟงกชนอนๆ การเรยกชดคำาสงกเหมอนฟงกชน แตคณไมสามารถใชมนในงานทไดรบหมอบหมายไดชดคำาสงของ SAS ทงหมดนน ถกอางกบการเรยก นนกคอ ชอของชดคำาสงตองปรากฏหลงคยเวรดในการเรยก
ไวยากรณของฟงกชนและการเรยกชดคำาสง
27
ไวยากรณของฟงกชนไวยากรณของฟงกชน คอfunction-name (argument-1<...,argument-n>)
function-name (OF variable-list)
function-name (OF array-name{*})
นคอคำาอธบายของไวยากรณ:ฟงกชน-ชอ ชอฟงกชนขอขดแยง สามารถเปนตวแปร คาคงท หรอชอของ SAS รวมถงฟงกชนอนๆ ประเภทและขอขดแยงท SAS อนญาตจะถกอธบายไวกบฟงกชนสวนบคคลและหลายๆขอขดแยงจะใชคอมมาTip: ถาจำานวนขอขดแยงใชไมได (เชน หายหรออยนอกขอบเขตทกำาหนด) SAS กจะเขยนไปยง log เพอแสดงใหเหนวาขอขดแยงใชงานไมได เซต _ERROR_ to 1 และผลลพธจำานวนทหายไปตวอยาง:
x=max(cash,credit); x=sqrt(1500); NewCity=left(upcase(City)); x=min(YearTemperature-July,YearTemperature-
Dec); s=repeat('----+',16); x=min((enroll-drop),(enroll-fail)); dollars=int(cash); if sum(cash,credit)>1000 then put 'Goal reached';
ตวแปร-รายการ
28
สามารถเปนฟอรมใดกไดในรายการของ SAS รวมถงชอตวแปรสวนบคคล ถามมากกวา 1 ตวแปร ปรากฏตองแยกดวย ชองวางหรอคอมมา และ OFตวอยาง:
a=sum(of x y z); 2 ตวอยางเทากน
o a=sum(of x1-x10 y1-y10 z1-z10);o a=sum(of x1-x10, of y1-y10, of z1-z10);
z=sum(of y1-y10);
การจดเรยง-ชอ {*} ชอถกกำาหนดดวยการจดเรยง การระบการจดเรยงในทน ทำาให SAS มผลตอการจดเรยงไมเปนรายการของตวแปร แทนทจะดำาเนนการกบสมาชกเพยงตวเดยวตวอยาง:
array y{10} y1-y10; x=sum(of y{*});
ไวยากรณของการเรยกชดคำาสงไวยากรณของการเรยกชดคำาสงคอ: CALL routine-name (argument-1<, ... argument-n>); CALL routine-name (OF variable-list); CALL routine-name (argument-1 | OF variable-list-1 <, ...argument-n | OF variable-list-n>);นคอคำาอธบายของไวยากรณชดคำาสง-ชอ ชอเรยกชดคำาสงของ SASขอขดแยง
29
สามารถเปนตวแปร คาคงท ชอจากภายนอก การอางอง การจดลำาดบหรอฟงกชน ขอขดแยงหลายๆขอถกแยกดวยคอมมา ตวเลขและชนดขอขดแยงนนถกอนญาตและอธบายดวยการเรยกชดคำาสงสวนบคคลในภาษา SASตวอยาง:
call rxsubstr(rx,string,position); call set(dsid); call ranbin(Seed_1,n,p,X1); call label(abc{j},lab);
ตวแปร-รายการ สามารถเปนฟอรมใดกไดในรายการของ SAS รวมถงชอตวแปรสวนบคคล ถามมากกวา 1 ตวแปร ปรากฏตองแยกดวย ชองวางหรอคอมมา และ OF
การใชฟงกชนขอจำากดบนฟงกชนขอขดแยงถาคาของขอขดแยงใชไมได SAS จะพมพขอความผดพลาดและจะเซตผลลพธไปยงคาทหายไป นคอการควบคมปกตของฟงกชนขอขดแยง
บางฟงกชนใหขอขดแยงถกยบยงภายในขอบเขตทแนนอน เชน ขอขดแยงของ Log ตองมากกวา 0
ฟงกชนสวนใหญจะไมยอมรบคาทหายไปวาเปนขอขดแยง ยกเวน สถตพรรณนาและฟงกชนทางการเงน
ปกตขอขดแยงถกอนญาตนนจะเปนหลกการ เชน ฟงกชน EXP บางฟงกชนทเปนไปได จะเปนการรวมของคาสดโตงททำาใหเกด
ปญหาฟงกชนของสถตพรรณนาSAS สรางฟงกชนทคนคาสถตพรรณนา ยกเวนฟงกชนทหายไป คอฟงกชนทกอใหเกดการผลตทางสถตโดย MEANS วธการคำานวณแตละสถตถกแลกเปลยนในขนตอนการสรางสถตเบองตนโดย SAS ในการ
30
แนะนำาขนตอนพนฐานของ SAS ไดคำานวณสถตพรรณนาสำาหรบคาทไมไดหายไปของขอขดแยงฟงกชนทางการเงนSAS สรางกลมของฟงกชนทใชในการคำานวณทางการเงน มนถกจดกลมดงน:
ชนดของฟงกชนทางการเงนชนดของฟงกชน ฟงกชน คำาอธบายกระแสเงนสด CONVX,
CONVXPคำานวณสำาหรบงบกระแสเงนสด
DUR, DURP
คำานวณระยะเวลาในการปรบเปลยนสำาหรบกระแสเงนสด
PVP, YIELDP
คำานวณมลคาปจจบนและอตราผลตอบแทนจนครบกำาหนดสำาหรบระยะกระแสเงนสด
การคำานวณคา COMPOUND
คำานวณคาดอกเบยทบตน
MORT คำานวณการผอนชำาระหนอตราผลตอบแทนภายใน
INTRR, IRR
คำานวณอตราผลตอบแทนภายใน
มลคาปจจบนและอนาคตสทธ
NETPV, NPV
คำานวณคาปจจบนและอนาคตสทธ
SAVING คำานวณมลคาในอนาคตเปนระยะคาเสอมราคา DACCxx คำานวณคาเสอมราคาสะสมถงระยะเวลาท
กำาหนดDEPxxx คำานวณคาเสอมราคาสำาหรบชวงเวลา
เดยว
ขอพจารณาพเศษของฟงกชนการเสอมราคา
31
ขอขดแยงระยะเวลาสำาหรบการทำางานของคาเสอมราคาทสามารถเปนเศษสวนสำาหรบทกฟงกชนยกเวน DEPDBSL และ DACCDBSL สำาหรบขอขดแยงเศษสวนคาเสอมราคาเปนตามสดสวนระหวางสองชวงเวลาตามลำาดบ
ขอควรระวง: ตรวจสอบวธการคดคาเสอมราคาสำาหรบชวงเวลาทเปนเศษสวน คณตองตรวจสอบวาวธการนมความเหมาะสมทจะใชกบระยะเวลาทเปนเศษสวนเพราะตารางคาเสอมราคาจำานวนมากตามทระบไวในตารางมกฎพเศษสำาหรบชวงเวลาทเปนเศษสวน
การใชขนตอนการสรางขอมลในฟงกชนทเขยนขนเองฟงกชนทเขยนขนเองสามารถเรยกวาขนตอนการสรางขอมล เพอ
สรางขอความในคณสมบต %SYSFUNC และ %QSYSFUNC มความแตกตาง%QSYSFUNC มคณสมบตพเศษและเทคนคชวยจำา และ%SYSFUNC ไมม ขอมลสวนมากในฟงกชนเหลานจะมองเหน%SYSFUNC และ %QSYSFUNC ในภาษา SAS ทเขยนขนเอง: อางอง%SYSFUNC เปนขอขดแยงทมการสรางขอมลขนตอนเดยวและมรปแบบทางเลอกดงตอไปน:%sysfunc(date(),worddate.)%sysfunc(attrn(&dsid,NOBS))คณไมสามารถจดเรยงขนตอนของขอมลภายใน %SYSFUNC อยางไรกตามคณสามารถเรยกขนตอนการเกบขอมล ตวอยางคอ:%sysfunc(compress(%sysfunc(getoption(sasautos)), %str(%)%(%')));
32
ขอขดแยงทงหมดในขนตอนการสรางขอมลใน%SYSFUNC แยกดวยคอมมา คณไมสามารถใชขอขดแยงทสรางดวย OFเพราะ%SYSFUNC เปนฟงกชนทเขยนดวยผใช คณไมตองใช “__” เหมอนในขนตอนการสรางขอมล เชน ขอขดแยงทเปดฟงกชนจะถกใชดวย “__” เมอใชฟงกชนอนเดยว แตขอขดแยงไมใช “__”เมอใชใน%SYSFUNCdsid=open("sasuser.houses","i");dsid=open("&mydata","&mode");%let dsid=%sysfunc(open(sasuser.houses,i));%let dsid=%sysfunc(open(&mydata,&mode));คณสามารถใชฟงกชนเหลานเรยกขอมลทงหมดของ SAS ยกเวนผทเกยวของกบขอมลหรอตวแปรในขนประมวลผล ฟงกชนเหลานไมไดรบอนญาต คอ DIF, DIM, HBOUND, INPUT, IORCMSG, LAG, LBOUND, MISSING, PUT, RESOLVE, SYMGET และทกฟงกชนขอมลตวแปร (เชน VLABEL)
การใชฟงกชนในการจดการไฟล SAS จดการไฟลในรปแบบทแตกตางกน ขนอยกบวาคณอยกบวาคณใชฟงกชนหรอคำาสง ถาคณใชฟงกชน เชน FOPEN, FGET, และ FCLOSE, คณสามารถตรวจสอบและจดการขอมลไดมากกวาเมอคณใชคำาสง INFILE, INPUT, และ PUTเมอคณใชไฟลภายนอก ฟงกชน FOPEN จดสรรชวคราว ทเรยกวา แฟมขอมลชวคราว (FDB) และเปดแฟมภายนอกสำาหรบการอานหรอการปรบปรง ฟงกชน FREAD ใชอานขอมลแฟมภายนอกและคดลอกขอมลลง ฟงกชน FDB FGET จะยายขอมลไปยงขอมลทเปนตวแปร ฟงกชนจะสงกลบคาทคณสามารถตรวจสอบกบคำาสงหรอฟงกชนอนๆในขนตอนการสรางขอมล เพอกำาหนดวธประมวลขอมลของคณหลงจากทบนทกผลการประมวล ฟงกชน FWRIT เขยนเนอหาของ FDB ไปยงแฟมภายนอกและ FCLOSE เพอปดไฟล
33
เมอคณใชชดขอมล SAS ฟงกชน OPEN เพอเปดขอมล ฟงกชน FETCH และ FETCHOBS ใชอานคาสงเกตทเปดจากขอมลใน SAS สชดขอมลใยขอมลเวกเตอร (DDV) ฟงกชน GETVARC และ GETVARN ใชยายขอมลไปยงขนตอนการสรางตวแปร ฟงกชนกลบคาทคณสามารถตรวจสอบกบคำาสงหรอฟงกชนอนๆในขนตอนการสรางขอมล เพอกำาหนดวธทคณตองการทจะประมวลผลขอมลของคณ หลงจากขอมลประมวลผลฟงกชน ฟงกชน CLOSE ใชในการปดขอมล สำาหรบคำาอธบายทสมบรณและตวอยางสามารถดไดจากฟงกชนและการเรยกชดคำาสงใน SAS อางอง: พจนานกรม
การใชฟงกชนเลขสมและการเรยกชดคำาสง
คาเรมตน
การใชฟงกชนเลขสมและการเรยกชดคำาสง การสรางเลขสมจากจดเรมตนเรยกวา คาเรมตน ผใชหรออปกรณคอมพวเตอรจะตองเปนฯจำานวนเตมทไมตดลบทขอมลนอยกวา 231-1 (or 2,147,483,647) ถาคณใชบวกกนกสามารถทำาซำาของตวเลขสมโดยใชขนตอนขอมลเดยวกน ถาคณใชศนย คอมพวเตอรทำาการเรมตนกระแสขอมลของตวเลขสมไมไดจำาลองแบบแตละฟงกชนเลขสมและการเรยกชดคำาสง สรางตวเลขสมจำาลองจากการแจกแจงทางสถตทเฉพาะเจาะจง ทกฟงกชนเลขสมตองระบคาเรมตน ทคงทหรอตวแปรทมคาคงทจำานวนเตม ทกๆการเรยกชดคำาสงเรยกตวแปรคาเรมตน นอกจากนทกๆการเรยกชดคำาสงตองใชกบตวแปรทมตวเลขสมสรางขนคาเรมตนจะตองดำาเนนการครงแรกของการทำางานหรอการเรยกชดคำาสง หลงจากการดำาเนนการของฟงกชนแตละคาเรมตนในปจจบนมการปรบปรงภายใน แตละขอขดแยงของคาเรมตนยงคงไมเปลยนแปลงหลงจากทำาซำาในการเรยกชดคำาสง อยางไรกตามตวแปรเรมตน มคาเรมตนท
34
เปนปจจบนในการสรางจำานวนสมตอไปดวยฟงกชน เปนไปไมไดทจะควบคมคาเรมตนและดงนนเปนตวเลขสมหลงจากการเตรยม
เปรยบเทยบของฟงกชนเลขสมและการเรยกชดคำาสงขอยกเวนสำาหรบฟงกชน NORMAL และ UNIFORM เทยบกบ
ฟงกชน RANNOR และ RANUNI ตามลำาดบ SAS จดเตรยมการเรยกชดคำาสงเหมอนเลขสม ใชการเรยกชดคำาสงควบคมมากกวา คาเรมตนกบการเรยกชดคำาสง คณสามารถสรางไดหลายอยางของตวเลขสมภายในขนตอนขอมลเดยวกน ถาคณใสคาเรมตนตางกน ในการเรมตนของคาเรมตนของตวแปรสมทสรางขนมความเปนอสระกนดวยฟงกชน แตไมสามารถสรางมากกวา 1 ขอมล โยจดหาคาเรมตนหลายคาภายในขนตอนการสรางขอมล ทงสองตวอยางแสดลใหเหนความแตกตางตวอยางท 1: การสรางกระแสขอมลหลายจากการเรยกชดคำาสงตวอยางนใชการเรยก RANUNI เพอสราง 3 สายของตวเลขสมจากการแจกแจงแบบเอกรปดวย 10 ตวเลข ทำาใหเหนผลการเรยกชดคำาสง ตวอยางเชนoptions nodate pageno=1 linesize=80 pagesize=60;
data multiple(drop=i); retain Seed_1 1298573062 Seed_2 447801538 Seed_3 631280; do i=1 to 10; call ranuni (Seed_1,X1); call ranuni (Seed_2,X2); call ranuni (Seed_3,X3); output; end; run;
proc print data=multiple; title 'Multiple Streams from a CALL Routine'; run;
ตวอยางการเรยกชดคำาสง:Multiple Streams from a CALL Routine 1
35
Obs Seed_1 Seed_2 Seed_3 X1 X2 X3
1 1394231558 512727191 367385659 0.64924 0.23876 0.17108 2 1921384255 1857602268 1297973981 0.89471 0.86501 0.60442 3 902955627 422181009 188867073 0.42047 0.19659 0.08795 4 440711467 761747298 379789529 0.20522 0.35472 0.17685 5 1044485023 1703172173 591320717 0.48638 0.79310 0.27536 6 2136205611 2077746915 870485645 0.99475 0.96753 0.40535 7 1028417321 1800207034 1916469763 0.47889 0.83829 0.89243 8 1163276804 473335603 753297438 0.54169 0.22041 0.35078 9 176629027 1114889939 2089210809 0.08225 0.51916 0.97286 10 1587189112 399894790 284959446 0.73909 0.18622 0.13269
ตวอยางท 2 การกำาหนดคาจากกระแสเดยวและหลายตวแปรใชคาเรมตนทง 3 ทไดมาจากตวอยางท 1 ตวอยางนใชฟงกชนในการสรางทง 3 ตวแปร ผลทไดจะแตกตางจากตวอยางท 1 เนองจากคาตวแปรทง 3 ถกสรางโดยคาเรมตนแรก เมอคณใชฟงกชนทเขยนขนเองมากกวา 1 ครงในขนตอนการสรางขอมลทฟงกชนจะยอมรบเฉพาะคาเรมตนคาแรก ทคณไมไดจดหาและสวนทเหลอoptions nodate pageno=1 linesize=80 pagesize=60;
data single(drop=i); do i=1 to 3; Y1=ranuni(1298573062); Y2=ranuni(447801538); Y3=ranuni(631280); output; end; run;
proc print data=single; title 'A Single Stream across Multiple Variables'; run;
36
ผลลพธตอไปนแสดงเหนถงคาของ Y1, Y2, และ Y3 ในตวอยางนมาจากการสมเลขเดยวทเกดกากคาเรมตน คณสามารถดไดโดยการเปรยบเทยบจากคาสงเกตทง 3 ตวแปรทมคาของ X1 ในตวอยางฟงกชนตวอยางฟงกชน
A Single Stream across Multiple Variables 1
Obs Y1 Y2 Y3
1 0.64924 0.89471 0.42047 2 0.20522 0.48638 0.99475 3 0.47889 0.54169 0.08225
จบครปแบบใช SAS Regular Expression (RX) และ Perl Regular Expression (PRX) ความหมายของการจบครปแบบและ Regular Expression
จบครปแบบชวยใหคณสามารถหาและดงรปแบบการจบคหลายคจากตวอกษรในขนตอนเดยว เชนเดยวกบการแทนในหลายสายในขนตอนเดยว ขนตอนสรางขอมลสนบสนน 2 ชนดของการจบคและการเรยกชดคำาสง
SAS regular expressions (RX) Perl regular expressions (PRX).
Regular Expression เปนรปแบบภาษาทมเครองมอทรวดเรวสำาหรบการแยกขอมลจำานวนมาก ประกอบดวยอกษรและอกขระพเศษทเรยกวา metacharactersเครองหมายดอกจน (*) และเครองหมายคำาถาม (?) เปนสองตวอยางของ metacharacters ดอกจน (*) ตรงกบศนยหรอมากกวาตวอกษรและเครองหมายคำาถาม (?) ตรงกบหนงหรอศนยอกขระ ตวอยางเชนถาคณออกขอมล ls *. คำาสง txt จากยนกซขอความแจงของเชลล, UNIX จะแสดงไฟลทงหมดในไดเรกทอรปจจบนทขนตนดวยตวอกษร "ขอมล" และจบดวยนามสกลไฟล "txt"เครองหมายดอกจน (*) และเครองหมายคำาถาม (?) มจำากดรปแบบ Regular expressions Perl regular expressions สราง
37
เครองหมายดอกจนและเครองหมายคำาถามทจะทำาใหการคนหามประสทธภาพมากขนและมความยดหยน
ความหมายของ SAS Regular Expression (RX) Functions และการเรยกชดคำาสง SAS Regular Expression (RX) Functions และการเรยกชดคำาสงหมายถงกลมของฟงกชนและการเรยกชดคำาสงทใชรปแบบการแสดงออกของ SAS ปกตการจบคเพอแยกสตรงตวอกษร คณสามารถคนหาสตรงตวอกษรทมรปแบบเฉพาะทคณระบและเปลยน substring ตรงกบอกขระยอยทแตกตางกนSAS regular expressions ประกอบดวย RXCHANGE, CALL RXFREE, CALL RXSUBSTR, RXMATCH และ RXPARSE และเปนสวนหนงของสตรงอกขระประเภทการจบคสำาหรบการทำางานและการปฏบต CALL สำาหรบขอมลเพมเตมเกยวกบฟงกชนเหลานและการเรยกชดคำาสงดอางอง SAS ภาษา: พจนานกรม
ความหมายของ Perl Regular Expression (PRX) และการเรยกชดคำาสง Perl Regular Expression (PRX) และการเรยกชดคำาสง หมายถงกลมของฟงกชนและการปฏบต CALL ทใชแกไขรน Perl เปนภาษาทตรงกบรปแบบเพอแยกสตรงตวอกษร ฟงกชน PRX ชวยใหคณสามารถทำาตอไปน:คนหาสำาหรบรปแบบของตวอกษรภายในสตรงแยกยอยจากสตรงคนหาและแทนทขอความทมขอความอน ๆแยกขอความจำานวนมากเชนบนทกการใชเวบหรอขอมลทเปนขอความอน ๆ ไดอยางรวดเรวกวาดวย SAS regular expressions.Perl Regular Expression (PRX)ประกอบดวย PRXCHANGE, CALL PRXDEBUG, CALL PRXFREE, CALL PRXNEXT, CALL
38
PRXPOSN, CALL PRXSUBSTR, PRXPAREN, PRXMATCH และ PRXPARSE และเปนสวนหนงของสตรงอกขระประเภทการจบคสำาหรบการทำางานและการเรยกชดคำาสง สำาหรบขอมลเพมเตมเกยวกบฟงกชนเหลานและการเรยกชดคำาสง ดอางอง SAS ภาษา: พจนานกรม
ประโยชนของการใช Perl Regular Expressions ในขนตอนการสรางขอมล ใช Perl Regular Expressions ในขนตอนขอมลชวยเพมตวเลอกการคนหาและแทนทในขอความ คณสามารถใช Perl Regular Expressions ทจะทำาตอไปน:ตรวจสอบขอมลแทนทขอความแยกยอยจากสตรงเขยนแกปญหาสงออก Perl ลงใน SAS logคณสามารถเขยนโปรแกรม SAS ทไมใช regular expressions จะใหผลลพธทเดยวกบทคณทำาเมอคณใช Perl Regular Expressions รหสไมแสดงออกปกต แตตองมสายงานทจะจดการกบตำาแหนงตวอกษรในสตรงและในการจดการกบชนสวนของสตรงPerl Regular Expressions รวมมากทสดหากไมไดทงหมดของขนตอนเหลานเปนหนงในการแสดงออกรหสผลมขอดดงตอไปนนอยแนวโนมทจะเกดขอผดพลาดงายตอการรกษาทชดเจนในการอานมประสทธภาพมากขนในแงของการปรบปรงประสทธภาพของระบบ
ใช Perl Regular Expressions ในขนตอนการสรางขอมล ขอตกลงใบอนญาต–
39
ยอหนา ตอไปน สอดคลองกบ สวนท 3 (ก) และ 4 ( ค) ของการอนญาต:ฟงกชน PRX ใชรน แกไขของ Perl 5.6.1 เพอดำาเนนการ รวบรวม การแสดงออกปกต และการจบค Perl จะรวบรวม เปนหองสมดสำาหรบใชกบ SAS การแกไข และเปนตนฉบบ Perl 5.6.1 ไฟล อสระทมอย จากเวบไซตSAS.ท http://support.sas.com/rnd/base แตละไฟล ทมการแกไข ม บลอก ความคดเหนทดานบนของ ไฟล อธบายถงวธการและเมอ ไฟลถกเปลยน executables ไดรบ ไมไดมาตรฐาน ชอ Perl รนมาตรฐาน ของ Perl สามารถไดรบจาก http://www.perl.comเฉพาะ Perl Regular Expressions สามารถเขาถงไดจาก ฟงกชน PRX สวนอน ๆ ของภาษา Perl ไมสามารถเขาถงได รนลาสด ของ นพจนปกต Perl ไมสนบสนน ตอไปน:
ตวแปร Perlนพจนปกต ตวเลอก c / / g และ / o และตวเลอก e / แทน ดวยชอสญลกษณ ทใช\ N ท ชอ { } ไวยากรณmetacharacters\ pp, \ PP และ \ X.รนโคด Perl ภายใน นพจนปกต ซงรวมถง ไวยากรณ (? รหส { }), ( ? {รหส }) และ ( p { รหส })จบครปแบบ Unicodeใช ? แบบ ? ? metacharacter ไดรบการปฏบต เชนเดยวกบการแสดงออกของ การเรมตน และจดสนสด ประจำา ตวคนmetacharacter \ Gความเหน Perl ระหวาง รปแบบและ ขอความทใชแทนท ตวอยางเชน: { s } # regexp ความคดเหน Perl { เปลยน }
40
backslashes จบคกบ m / \ \ \ \ / แทน m / \ \ / ควรจะใช เพอใหตรงกบ เครองหมายทบขวาไวยากรณของ Perl Regular Expressions Perl Regular Expressions จะประกอบดวยตวอกษรและอกขระพเศษทเรยกวา metacharacters เมอทำาการจบค, SAS คนหาสตรงแหลงทมาสำาหรบการยอยทตรงกบการแสดงออกปกต Perl ทคณระบ การใช metacharacters ชวยให SAS ในการดำาเนนการเปนพเศษเมอการคนหาสำาหรบการจบค:ถาคณใช metacharacter \ D, SAS ตรงกบหลกระหวาง 0-9ถาคณใช / \ dt / SAS พบวาตวเลขในสตรง "Raleigh, NC 27506"ถาคณใช / world / SAS พบ “world " ในสตรง "Hello world!"ตารางตอไปนประกอบดวยรายชอของ Perl metacharacters นพจนปกตทคณสามารถใชเมอคณสรางรหสของคณ คณสามารถคนหารายการทสมบรณของ metacharacters ดงตอไปนหนาคน Perl ท http://www.perldoc.com/perl5.6.1/pod/perlre.html
เครองหมายพเศษ
คำาอธบาย
\ เครองหมายตวอกษรถดไปเปนทงอกขระพเศษ, ตวอกษร, อางองกลบหรอ octal escape:n "" ตรงกบตวอกษร "n""\ n" ตรงกบตวอกษรสายใหม"\ \" การจบคกบ "\""\ ("การจบคกบ "("
| ระบหรอเงอนไขเมอคณเปรยบเทยบสตรงตวอกษรและตวเลข
เครองหมายพเศษ
คำาอธบาย
^ ตรงกบตำาแหนงทจดเรมตน
41
$ ตรงกบตำาแหนงทสวนทาย* ตรงกบ sub expression กอนหนาศนยหรอ
มากกวา 1 ครง:zo * ตรงกบ "z" และ "zoo"* เทยบเทากบ {0}
+ ตรงกบ sub expression กอนหนานหนงครงหรอมากกวา:"zo +" จบคกบ"zo" และ "Zoo""zo +" ไมตรง "z"+ เทยบเทากบ {1}
? ตรงกบศนย sub expression กอนหนานหรอครงหนง:"Do (es)?" ตรงกบ "ทำา" ใน "ทำา" หรอ "ไม"? เทยบเทากบ {0,1}
{n} n คอจำานวนเตมทไมเปนลบทตรงกบ n ครงวา:"o {2}" ตรงกบทงสองของ o ใน "food"
"o {2}" ไมตรง "o" ใน "Bob"{n,} n คอจำานวนเตมทไมเปนลบทตรงกบ n ครงหรอ
มากกวา:"o {2}" ตรงกบทงหมดของ o ใน "foooood""o {2}" ไมตรง "o" ใน "Bob""o {1}" เทยบเทากบ "o +""o {0,}" เทยบเทากบ "o *"
{n,m} n และ m เปนจำานวนเตมไมเปนลบท n <= m พวกเขาตรง n อยางนอยและเวลาท m มากทสด:"o {1,3}" ตรงกบครงแรกทสามของ o ใน "Fooooood""o {0,1}" เทยบเทากบ "o"
42
หมายเหต: คณไมสามารถใสชองวางระหวางเครองหมายจลภาคและตวเลข
period (.) ตรงกบตวอกษรตวเดยวยกเวนบรรทดใหม เพอใหตรงกบตวอกษรรวมทงบรรทดใหมใด ๆ ใหใชรปแบบเชน "[. \ n]"
(pattern) ตรงกบรปแบบและจบภาพการจบค เพอดงตำาแหนงและระยะเวลาของการแขงขนทถกจบใช CALL PRXPOSN เพอใหตรงกบตวอกษรวงเลบใช "\ (" หรอ "\)"
เครองหมายพเศษ
คำาอธบาย
x|y การจบคทง x หรอ y:"z |Food" ตรงกบ "z" หรอ "Food""(z | ฉ) อด" ตรงกบ "Zood" หรอ "อาหาร"
[xyz] ระบชดอกขระทตรงกบตวอกษรทปดลอม"[abc]" ตรงกบ "" in "plian"
[^xyz] ระบชดอกขระเชงลบทตรงกบตวละครทไมไดทปดลอม"[abc]" ตรงกบ "" in "plian"
[a-z] ระบชวงของอกขระทตรงกบตวอกษรใด ๆ ในชวง:"[az]" ตรงกบตวอกษรตวพมพเลกใด ๆ ในชวง "a"ถง "z"
[^a-z] ระบชวงของอกขระทไมตรงกบตวอกษรอยในชวงใด ๆ :"[^ az]" ตรงกบตวอกษรทไมไดอยในชวง "a" ถง "z" ใด ๆ
\b ตรงกบขอบเขตคำา (ตำาแหนงระหวางคำาและพนท):"er\b" ตรงกบ "er" in "never""er\b" ไมตรงกบ "er" in "verb"
\B ตรงกบขอบเขตทไมคำา:
43
"er\b" ตรงกบ "er" in " verb ""er\b" ไมตรงกบ "er" in "neve"
\d ตรงกบตวอกษรหลกทเทยบเทา [0-9]\D ตรงกบอกขระทไมใชหลกทเทยบเทากบ [^ 0-9]\s ตรงกบอกขระชองวางใด ๆ สขาวรวมทงพนทแทบ
เลอนฟอรมและอน ๆ และเทยบเทากบ [\f\n\r\t\v].\S ตรงกบตวอกษรทไมไดเปนอกขระชองวางสขาวใด ๆ
และเทยบเทากบ[\f\n\r\t\v].\t ตรงกบแถบตวอกษรและเทยบเทากบ "\ x09"\w ตรงกบตวอกษรคำาใด ๆ รวมทงขดและเทยบเทากบ
[A-Za-z0-9_]\W ตรงกบอกขระทไมใชคำาพดและเทยบเทากบ [^ A-Za-
z0-9_]\num ตรงกบหมายเลข ทหมายเลขเปนจำานวนเตมบวก นคอ
การอางองกลบไปตรงบนทก:"(.) \ 1" ตรงกบสองอกขระเหมอนกนตดตอกน
ตวอยางท 1 การตรวจสอบขอมล
คณสามารถทดสอบสำาหรบรปแบบของตวอกษรภายในแถว ตวอยางเชนคณสามารถตรวจสอบแถวเพอตรวจสอบวามนมหมายเลขโทรศพททจดรปแบบไดอยางถกตอง ชนดของการทดสอบนจะเรยกวาการตรวจสอบขอมล
ตวอยางตอไปนตรวจสอบรายการของหมายเลขโทรศพท การจะมความถกตองหมายเลขโทรศพทจะตองมหนงในรปแบบดงตอไปน (XXX) XXX-XXXX or XXX-XXX-XXXX. data _null_; if _N_ = 1 then do; paren = "\([2-9]\d\d\) ?[2-9]\d\d-\d\d\d\d"; dash = "[2-9]\d\d-[2-9]\d\d-\d\d\d\d"; regexp = "/(" || paren || ")|(" || dash || ")/";
44
retain re; re = prxparse(regexp); if missing (re) then do; putlog "ERROR: Invalid regexp " regexp; stop; end; end; length first last home business $ 16; input first last home business; if ^prxmatch(re, home) then putlog "NOTE: Invalid home phone number for " first last home; if ^prxmatch(re, business) then putlog "NOTE: Invalid business phone number for " first last business; datalines; Jerome Johnson (919)319-1677 (919)846-2198 Romeo Montague 800-899-2164 360-973-6201 Imani Rashid (508)852-2146 (508)366-9821 Palinor Kent . 919-782-3199 Ruby Archuleta . . Takei Ito 7042982145. Tom Joad 209/963/2764 2099-66-8474 ; รายการตอไปนตรงกบสายทมหมายเลขในขนตอนขอมลทแสดงไวดานบน 1.สรางขนตอน ขอมล
2. สรางนพจนปกต Perl ในการระบ หมายเลขโทรศพททตรงกบ ( XXX ) xxx-xxxx และกำาหนด paren ตวแปร เพอเกบ ผล ใชองคประกอบ ไวยากรณ ตอไปนเพอ สรางนพจนปกต Perl :
\ (ตรงกบวงเลบ เปด ใน รหสพนท
[ 2-9 ] ตรงกบ ตวเลข 2-9 นเปน หมายเลขแรก ใน รหสพนท
\ d ตรงกบ หลก นเปน ตวเลขทสอง ใน รหสพนท
\ d ตรงกบ หลก นเปน ตวเลขทสาม ใน รหสพนท
\ ) ตรงกบวงเลบ ปด ใน รหสพนท
? ตรงกบ พนท(ซงเปน subexpression กอนหนาน ) เปนศนยหรอ หนงครง ในพนท ทมความสำาคญ ใน การแสดงออกปกต Perl พวกเขา ใหตรงกบ พนทใน ขอความทคณ กำาลงคนหา หากพนทนำาเครองหมายคำาถาม metacharacter ( เชนเดยวกบ ในกรณน) รปแบบตรงกบ ทง ศนย ชองวางหรอ พนทหนงท อยในตำาแหนง ใน หมายเลขโทรศพทน
45
3. สรางนพจนปกต Perl ในการระบ หมายเลขโทรศพททตรงกบ XXX -XXX -XXXX และกำาหนด DASH ตวแปร เพอเกบผล
4. สรางนพจนปกต Perl เพอเชอม การแสดงออกปกต สำาหรบ (XXX) xxx-xxxx และ XXX - XXX - XXXX concatenation ชวยใหคณสามารถ คนหา หมายเลขโทรศพท ทงสอง รปแบบ จาก การแสดงออกไดปกต
วงเลบและ DASH เปนนพจนปกตจะถกวางไวในวงเลบ บาร metacharacter (|) ทตงอยระหวางวงเลบและ DASH สงคอมไพเลอรเพอใหตรงกบรปแบบ slashes รอบรปแบบบอกคอมไพเลอทเรมตนและสนสดของการแสดงออกปกต
ผานการแสดงออกปกต Perl เพอ PRXPARSE และรวบรวม การแสดงออก PRXPARSE สงกลบคากบรปแบบ ทรวบรวม ใชคาทม ฟงกชน อน ๆ Perl นพจนปกต และ การปฏบต CALL ชวยให เอสเอ ในการดำาเนนการ กบการแสดงออกปกต รวบรวม Perl
5. ใชฟงกชน MISSING เพอตรวจสอบวาการแสดงออกปกต ไดรวบรวม และประสบความสำาเรจ
6. ใชคำาสง PUTLOG ทจะเขยน ขอความขอผดพลาดในการเขาสระบบ SAS ถานพจนปกต ไมได รวบรวม 7. คนหาหมายเลขโทรศพท บาน ทถกตอง PRXMATCH ใชคาจาก PRXPARSE พรอมกบ ขอความ คนหาและสงกลบ ตำาแหนงทแสดงออกปกต ทพบใน การคนหาขอความ หากม ตรงกบหมายเลขโทรศพท บาน ไมม PUTLOG statement เขยน บนทกลงในบนทก SAS
8. คนหาหมายเลข โทรศพทของธรกจ ทถกตอง PRXMATCH ใชคา จาก PRXPARSE พรอมกบ ขอความ คนหาและสงกลบ ตำาแหนงทแสดงออกปกต ทพบใน การคนหาขอความ หากม ตรงกบหมายเลข
46
โทรศพท ธรกจไม คำาสง PUTLOG เขยน บนทกลงในบนทก SAS ตอไปนถกเขยนไปยง Log SAS:
NOTE: Invalid home phone number for Palinor Kent NOTE: Invalid home phone number for Ruby Archuleta NOTE: Invalid business phone number for Ruby Archuleta NOTE: Invalid home phone number for Takei Ito 7042982145NOTE: Invalid business phone number for Takei Ito NOTE: Invalid home phone number for Tom Joad 209/963/2764NOTE: Invalid business phone number for Tom Joad 2099-66-8474 ตวอยางท 2: การแทนทขอความ
คณสามารถใชนพจนปกต Perl เพอหาตวอกษรทเฉพาะเจาะจงภายในสตรง จากนนคณสามารถลบตวอกษรหรอแทนทพวกเขากบตวแบบอน ๆ ในตวอยางนทงสองเหตการณทเกดขนจากตวอกษรนอยกวา (<) จะถกแทนทดวย <และทงสองเหตการณทเกดขนจากตวแบบทใหญกวา (>) จะถกแทนทโดย>data _null_; if _N_ = 1 then do; retain lt_re gt_re; lt_re = prxparse('s/</</'); gt_re = prxparse('s/>/>/'); if missing(lt_re) or missing(gt_re) then do; putlog "ERROR: Invalid regexp."; stop; end; end; input; call prxchange(lt_re, -1, _infile_); call prxchange(gt_re, -1, _infile_);
47
put _infile_; datalines4; The bracketing construct ( ... ) creates capture buffers. To refer to the digit'th buffer use \<digit> within the match. Outside the match use "$" instead of "\". (The \<digit> notation works in certain circumstances outside the match. See the warning below about \1 vs $1 for details.) Referring back to another part of the match is called backreference.;;;;
รายการตอไปนจะตรงกบหมายเลขในขนตอนขอมลทแสดงไวดานบน
1. สรางขนตอน ขอมล2. สรางนพจนปกต Perl ในการระบ หมายเลขโทรศพททตรงกบ
( XXX ) xxx-xxxx และกำาหนด paren ตวแปร เพอเกบผล ใชองคประกอบ ไวยากรณ ตอไปนเพอ สรางนพจนปกต Perl :
\ ( ตรงกบวงเลบ เปด ใน รหสพนท.เปด วงเลบคอ จดเรมตน ของ submatch [ 2-9 ] ตรงกบ ตวเลข 2-9 นเปน หมายเลขแรก ใน รหสพนท\ d ตรงกบ หลก นเปน ตวเลขทสอง ใน รหสพนท \ d ตรงกบ หลก นเปน ตวเลขทสาม ใน รหสพนท \ ) ตรงกบวงเลบ ปด ใน รหสพนท วงเลบ ปด จดสนสด ของ submatch ? ตรงกบ พนท(ซงเปน subexpression กอนหนาน ) เปนศนยหรอ หนงครง พนท ทมความสำาคญ ใน การแสดงออกปกต Perl พวกเขา ใหตรงกบ พนทใน ขอความทคณ กำาลงคนหา หากพนทนำาเครองหมายคำาถาม metacharacter ( เชนเดยวกบ ในกรณน) รปแบบตรงกบ ทง ศนย ชองวางหรอ พนทหนงท อยในตำาแหนง ใน หมายเลขโทรศพทน
3. สรางนพจนปกต Perl ในการระบ หมายเลขโทรศพททตรงกบ XXX -XXX -XXXX และกำาหนด DASH ตวแปร เพอเกบผล
48
4. สรางนพจนปกต Perl เพอเชอม การแสดงออกปกต สำาหรบ ( XXX ) xxx-xxxx และ XXX - XXX - XXXX concatenation ชวยใหคณสามารถคนหาหมายเลขโทรศพท ทงสอง รปแบบ จาก การแสดงออกปกต วงเลบ และ DASH นพจนปกต จะถกวางไว ในวงเลบ บาร metacharacter ( | ) ท ตงอยระหวาง วงเลบ และ DASH สง คอมไพเลอร เพอใหตรงกบ รปแบบ ทง slashes รอบ รปแบบ ทงบอกคอมไพเลอ ท เรมตนและสนสด ของการแสดงออก
5. ผานการแสดงออกปกต Perl เพอ PRXPARSE และรวบรวม การแสดงออก PRXPARSE สงกลบคากบรปแบบ ทรวบรวม ใชคาทม ฟงกชน อน ๆ Perl นพจนปกต และ การปฏบต CALL ชวยให เอสเอ ในการดำาเนนการ กบการแสดงออกปกต รวบรวม Perl
6. ใชฟงกชน MISSING เพอตรวจสอบวาการแสดงออกปกต Perl รวบรวม โดยไมผดพลาด
7. ใชคำาสง PUTLOG ทจะเขยน ขอความขอผดพลาดในการเขาสระบบ SAS ถานพจนปกต ไมได รวบรวม
8. รวบรวมการแสดงออกปกต Perl ทคนหา สำาหรบ สตรง ทถกตอง รหส พนททางตอนเหนอ แคโรไลนา
9. คนหาหมายเลข โทรศพทของธรกจ ทถกตอง10. ใชฟงกชน PRXPAREN เพอตรวจสอบวา submatch ทจะ
ใช PRXPAREN กลบ submatch ลาสดท จบค ถา รหสพนทตรงกบ รปแบบ ( XXX ), PRXPAREN สงกลบคา 2 ถา รหสพนทตรงกบ XXX ฟอรม PRXPAREN ผลตอบแทนท คมคา 4
11. โทร ประจำา PRXPOSN เพอดง ตำาแหนงและความยาวของ submatch
12. ใชฟงกชน PRXMATCH เพอตรวจสอบวา รหสพนททถกตอง รหส พนททางตอนเหนอ แคโรไลนาและ เขยน ขอสงเกตไปยงการเขาสระบบตอไปน ถกเขยนไปยงการเขาสระบบ SAS:
In North Carolina: Jerome Johnson (919)846-2198In North Carolina: Palinor Kent 704-782-3199
49
In North Carolina: Takei Ito 704-298-4738การเขยนแกปญหาสงออก Perl เพอเขาสระบบ SAS
ขนตอนขอมลทใหการสนบสนนการแกจดบกพรองในกจวตรประจำาวน PRXDEBUG CALL ชวยใหคณสามารถเปดและปดขอความทสงออก Perl โดยการแกปญหาทถกสงไปเขาสระบบ SAS
ตวอยางตอไปนเขยนแกปญหาสงออก Perl ลงในบนทก SASdata _null_;
/* CALL PRXDEBUG(1) turns on Perl debug output. */ call prxdebug(1); putlog 'PRXPARSE: '; re = prxparse('/[bc]d(ef*g)+h[ij]k$/'); putlog 'PRXMATCH: '; pos = prxmatch(re, 'abcdefg_gh_');
/* CALL PRXDEBUG(0) turns off Perl debug output. */ call prxdebug(0);run;
เขยนเอาทพทตอไปนเพอเขาสระบบ SAS
การ Debugging output SASPRXPARSE: Compiling REx `[bc]d(ef*g)+h[ij]k$'size 41 first at 1rarest char g at 0rarest char d at 0 1: ANYOF[bc](10) 10: EXACT <d>(12) 12: CURLYX[0] {1,32767}(26) 14: OPEN1(16) 16: EXACT <e>(18) 18: STAR(21) 19: EXACT <f>(0) 21: EXACT <g>(23) 23: CLOSE1(25) 25: WHILEM[1/1](0)
50
26: NOTHING(27) 27: EXACT <h>(29) 29: ANYOF[ij](38) 38: EXACT <k>(40) 40: EOL(41) 41: END(0)anchored `de' at 1 floating `gh' at 3..2147483647 (checking floating) stclass `ANYOF[bc]' minlen 7 PRXMATCH: Guessing start of match, REx `[bc]d(ef*g)+h[ij]k$' against `abcdefg_gh_'...Did not find floating substr `gh'...Match rejected by optimizerสำาหรบคำาอธบายรายละเอยดของการสงออกในการแกปญหา Perl, ในการอางอง PRXDEBUG CALL ในภาษา SAS: พจนานกรม
ฟงกชนฐาน SAS สำาหรบการใชงานในเวบ
ฟงกชนทจดการเนอหาบนเวบทเกยวของทมอยในฐาน SAS ซอฟแวร HtmlEncode และ URLENCODE สตรงเขารหส HTMLDECODE และ URLDECODE สตรงถอดรหส สำาหรบขอมลเกยวกบเวบทใชเครองมอการ SAS ทำาตามการเชอมโยงชมชนกบการสนบสนนลกคา SAS support.sas.com
ARM Macros
คำาอธบายของ ARM MacrosARM Macros เปนวธในการวดประสทธภาพของโปรแกรมทพวก
เขาดำาเนนการใช Macros เขยนบนทกรายการลงในบนทก
51
ของ ARMARM log คอผลลพธไฟลขอความภายนอกทมการบนทกเขา ARM ทำารายการคณใส ARM Macros ลงในโปรแกรม SAS ของคณทจดยทธศาสตรเพอทจะสรางสง ARM API เรยกฟงกชนฟงกชน API ARM เรยกโดยทวไปแลวจะเขาสเวลาสงและขอมลอน ๆ ทเกยวของไปยงแฟมบนทกการวดเวลาระหวาง ARM API เรยกฟงกชนเหลานทำาใหการวดการเวลาตอบสนองโดยประมาณ
ARMmacros มขอมลในตวและไมสงผลกระทบตอรหสทอยโดยรอบๆ
โดยมเงอนไขวาชอตวแปรผานการเปนตวเลอกในการ ARM macros มความเปนเอกลกษณ ARM macros ทใชในรหสเปด (รหสทไมไดอยในขนตอน PROC หรอ DATA) และในการจดเตรยมขอมลหรอ SCL environments.
มสองประเภทของแมโคร ARM คอ:
-ARM macros การใชงานเครองมอ
-macros หลงการประมวลผล ARM ทจะใชกบการเขาสระบบ ARM macrosหมายเหต: ARM macros ไมใชสวนหนงของสงอำานวยความสะดวก SAS Macro พวกเขาเปนสวนหนงของอนเตอรเฟซ SAS ARM เหนการตรวจสอบประสทธภาพการใชการวดการตอบสนองการใชงาน (ARM) สำาหรบขอมลเกยวกบอนเตอรเฟซ SAS ARM ทประกอบดวยการดำาเนนการของ API ARM เปนตวแทน ARM,ARM macros และ ARM system options
52
การใช ARM Macrosภาพรวมของ ARM Macros
ARM macros เรยกใช ARM API function ARM macros โดยอตโนมตการจดการรหสกลบมาจาก ARM API การเรยกฟงกชน ARM API การเรยกฟงกชนจะดำาเนนการในซอฟตแวรทม SAS ARM macros และการเรยกฟงกชนเหลานเปนวธการวดประสทธภาพการทำางานของ SAS applications ขณะทพวกเขากำาลงทำางานอยสำาหรบ ARM API แตละการเรยกฟงกชนม macros ทสอดคลองกนตารางตอไปนแสดงใหเหนถงความสมพนธระหวาง SAS ARM macros และ ARM API function calls:
ตารางความสมพนธระหวาง SAS Macros ARM และฟงกชน API ARM
SAS ARM Macro
ARM API Function Call
%ARMINIT ARM_INIT%ARMGTI
DARM_GETID
%ARMSTRT
ARM_START
%ARMUPDT
ARM_UPDATE
%ARMSTOP
ARM_STOP
%ARMEND ARM_ENDSAS ARM macro ARM API function call.
สามารถใชได ARM macros ดงตอไปน
53
%ARMINIT Macro สรางการเรยกใชฟงกชน ARM_INIT ซงชอโปรแกรมและเลอกผใชของโปรแกรมและทำาการเรมตน ARM environment สำาหรบโปรแกรม โดยปกตคณจะใสmacro นในรหสของคณอกครง
%ARMGTID Macro สรางการเรยกใชฟงกชน ARM_GETID ซงชอทำารายการ ใช ARMGTID% สำาหรบทำารายการทไมซำากนในแตละเพอทจะอธบายถงประเภทของการทำาธรกรรมตองเขาสระบบ A% ARMGTID โดยทวไปแลวจะเปนรหสสำาหรบการเรยนแตละรายการในโปรแกรมประยกต
%ARMSTRT Macro สรางการเรยกใชฟงกชน ARM_START ซงเปนสญญาณเรมตนของทำารายการเชน ใส ARMSTRT% กอนทแตละรายการทคณตองการเขาสระบบ ในขณะท ARMGTID% กำาหนดระดบรายการ, ARMSTRT% แสดงใหเหนวาทำารายการกำาลงดำาเนน
%ARMUPDT Macro คอตวเลอก macro ทสราง ARM_UPDATE function call ซงมขอมลเพมเตมเกยวกบความกาวหนาของรายการใส ARMUPDT% ระหวาง ARMSTRT% และ ARMSTOP% เพอทจะจดหาขอมลเกยวกบรายการทอยในความคบหนา
%ARMSTOP Macro สรางการเรยก ARM_STOP function call,ทสญญาณการสนสดของการทำารายการเชน ใส ARMSTOP% ททำารายการเปนทรจกกนวาจะแลวเสรจ
%ARMEND Macro สรางการเรยก ARM_END function call ซงสนสด ARM environment และสญญาณทใชจะไมทำาการเรยก ARM อก
54
ARM macros อนญาตใหมการปฏบตตามเงอนไขการตงคาตวเลอก macros ทเหมาะสมและตวแปร
บางจดทวไปเกยวกบ ARM macros ดงตอไปน
คำาแนะนำาทวไปทม ARM macros ทงหมด เพอหลกเลยง, ในโปรแกรมการใชงานของตวแปร macros หรอตวแปร SAS ขนตนดวยตวอกษร "_ARM."
ตวเลอกทงหมด macros พารามเตอรคำาหลก ไมมพารามเตอรระบตำาแหนง คาสำาหรบตวเลอก macros ทควรจะเปนคาท SAS นนคอ , ตวแปร SAS,ตวอกษรยกมาเปนตวเลขคงทและอน ๆ
ARM macros สามารถทำางานไดภายในการจดการขอมลหรอในรหสเปด ใชตวแปร _ARMACRO หรอ MACONLY = yes | no ตวเลอก macros ทจะบอกการดำาเนน macros ซงโหมดนจะถกนำามาใช สำาหรบขอมลเพมเตมโปรดดทการตงคาของสงแวดลอม
การใชตวแปรทม ARM MacrosARM macros ใชตวแปรทจะสงรหสและขอมลอน ๆ จากทหนงไป
ยงอก macros เพราะ ARM macros function ภายในการจดเตรยมขอมลเดยวกนขามการจดเตรยมขอมลและในรหสเปดตวแปรทใชโดย macros สามารถใชรปแบบของขอมลทตวแปรขนตอนหรอตวแปร macros ตามทกำาหนดโดยเศรษฐกจมหภาค
การจดเตรยมตวแปร SAS DATA จะใชในการสงผานขอมล ID ระหวางสองหรอมากกวา ARM macros ในการจดเตรยมขอมลเดยวกน การจดเตรยมตวแปร SAS DATA จะใชในการสงผานขอมล ID ระหวาง
55
สองหรอมากกวา ARM macros ใน DATA step environment แตไมไดอยใน SCL environment คำาสง DROP ถกสรางขนสำาหรบตวแปรเหลานเพอใหพวกเขาจะไมรวมอยโดยไมตงใจในชดขอมลทสงออก
หากขอมลท ID จะตองผานระหวางสองหรอมากกวา ARM macros ขามการจดเตรยมขอมลทแยกตางหาก,
แลวตวแปร Macros ทถกนำามาใช
SAS DATA step variables และ macro variables เปนทนำามาใชทวโลก ดงน
Global ARM Macro VariablesVariable Description Set By Used as Input
by_ARMA
PIDapplication ID
%ARMINIT %ARMEND_ARMT
XIDtransaction class ID
%ARMGTID %ARMSTRT_ARMS
HDLstart handle %ARMSTRT %ARMUPDT,
%ARMSTOP_ARMR
Cerror status %ARMUPDT
%ARMSTOP%ARMEND
none
_ARMGLVL
global level indicator
calling program
all
_ARMTLVL
target level indicator
calling program
all
_ARMEXEC
global enablement
calling program
all
_ARMACRO
open code enablement
calling program
all
56
_ARMSCL
SCL code enablement
calling program
All
วตถประสงคของ ARM API 3 ขอทระบใน วตถประสงคของ ARM API ดงตอไปน
การใชงานทเปนตวแทนของระบบทคณกำาลงสราง,เชน สนคาคงคลงหรอโปรแกรมสงคำาสง เพราะอนเตอรเฟซ SAS กบ API ARM ใหผลรวมกบพนฐานตอการประยกตใชคณอาจตองการทจะพจารณานเมอคณกำาหนดขอบเขตโปรแกรมของคณ
รายการ classesspecify หนวยงานคณควรสรางคลาสรายการสำาหรบประเภทแตละหลกของงานทคณตองการสรางภายในโปรแกรม แนวคดในคลาสรายการเปนแมแบบสำาหรบเรมตนรายการ
กรณรายการระบเวลาเรมตนทแทจรงสำาหรบหนวยงาน กรณรายการมขอมลเวลาการตอบสนองทเกยวของดวย
API ARM ใชตวบงชตวเลขหรอรหสทไมซำากนการระบ ARM ทมอนพทและเอาทพทจาก ARM macros ชนสามท
o แตกตางรหสโปรแกรมo รหสรายการคลาสo เรมตนจดการ (เวลาเรมตน) สำาหรบกรณรายการกนของรหส
ทสอดคลองกบ ARM ชนสามเปน
57
การจดการ ID การใช ARM macrosตวอยางเหลานแสดงใหเหนถงวธการท ARM macros
ทำางาน ARM macros โดยอตโนมตการจดการรหสการประยกตใชรหสการทำาธรกรรม และเรมตนจดการการจดการ ID และเรมตนทำางานไดดทสดในรปแบบการเรยก ARM งาย ด ARM แบบแผน macros ทซบซอนสำาหรบขอมลเพมเตม โดยคาเรมตน ARM macros ใชรหสทถกสรางขนมาจากการเรยก macros ลาสด ตวอยางตอไปนแสดงใหเหนถงวธการใชงานทงหมดของ ARM macros:
/*global macro variable to indicate ARM macros are outside the data step*/%let _armacro=1;
/* start of the application */%arminit(appname='Sales App', appuser='userxyz');
/* define the transaction classes */%armgtid(txnname='Sales Order', txndet='Sales Order Transaction'); /* more arm_getid calls go here for different transaction classes */
/* start of a transaction */%armstrt;
data_null_; /* place the actual transaction code here *//* update the status of the transaction as it is running */%armupdt(data='Sales transaction still running...',maconly=no);run;
/* place the actual transaction stop here *//* the transaction has stopped */%armstop(status=0);
/* end of the application */%armend;
58
การจดการ ID ทงหมดจะดำาเนนการโดย macros โดยไมตองเรยกโปรแกรมเพอตดตามรหส macros ในตวอยางกอนหนานใชในแตละสวนใหญสรางขนลาสดคา ID จาก macros กอนหนาตวอยางตอไปนเหมอนกนแตความเหนอธบายผานของรหสในรายละเอยดเพมเตมไดท:
%let _armacro=1;
/* * This %arminit macro will generate both a SAS * variable and global macro variable by the name * of _armapid and set it in the ID that is returned * from the arm_init() function call that is * wrapped by the macro. */ %arminit(appname='Sales App', appuser='userxyz');
/* * This %armgtid macro uses the _armapid SAS variable * as input to the arm_getid() function call that it wraps. * It also generates both a SAS variable and global macro* variable by the name of _armtxid and sets them to the* ID that is returned from the arm_getid function call that* it wraps. */ %armgtid(txnname='Sales Order', txndet='Sales Order Transaction');
/* * Because we are still in the same DATA step, the %armstrt * macro below will use the _armtxid SAS variable that is * generated from the previous %armgtid macro as input * to the arm_start() function call that it wraps. It * also generates an _armshdl variable. */ %armstrt;
/* * The %armupdt call below uses the _armshdl SAS variable * that is generated from the previous %armstrt macro. */ %armupdt(data='Sales transaction still running...');
/* * The armstop call also uses the same _armshdl SAS * variable from the %armstrt. */ %armstop(status=0);
59
/* * The %armend call uses the _armapid SAS variable * generated by the %arminit macro earlier to end * the application. */ %armend;
run;
คณไดรหส ARM macros ทงทแตกตางกนการจดเตรยมขอมลดงตอไปนและบรรลผลเดยวกน:
run;
data_null_; /* note the start of the transaction */ %armstrt;
/* place the actual transaction here */run;
data_null_; /* update the status of the transaction as it is running */ %armupdt(data='Sales transaction still running...');run;
data_null_;/* place the actual transaction stop here */
/* note that the transaction has stopped */ %armstop(status=0);run;
data_null_;/* note the end of the application */ %armend;run;
ARMMacro เรยกแบบแผนทซบซอนชวยใหMacro โดยอตโนมตใชตวแปรทวโลกในสถานการณขนพน
ฐานการเขยนโปรแกรมงาย แตMacro ทใชตวแปรทวโลกสามารถนำาไปสผลลพธททำาใหเขาใจผดในสถานการณทมความซบซอนมากขนเมอคณพยายามทจะตรวจสอบการใชงานพรอมกนหรอการทำาธรกรรมดงตอไปน:เพอบนทกรหสใชตวเลอก var * (APPIDVAR = TXNIDVAR =
60
และ SHDLVAR =) เพอสงกลบหรอรหสในตวแปรของคณเองชอ นคอตวอยางทใชในการ SHDLVAR = คอเลอกทจะบนทกเรมตนจดการ:
data_null_; %arminit(appname='App 1',getid=yes,txnname='txn 1'); run;
/* start transaction instance 1*/data_null_; %armstrt; run;
/* start transaction instance 2 */data_null_; %armstrt; run;
/* WRONG! This assumes that the %armupdt is updating * the first transaction. However, it is actually updating the * second transaction instance because _armshdl contains the value * from the last macro call that was executed, which is the second * transaction. */data_null_; %armupdt(data='txn instance 1 still running...');
Run;
เพอบนทกรหสใชตวเลอก var * (APPIDVAR = TXNIDVAR = และ SHDLVAR =) เพอสงกลบหรอรหสในตวแปรของคณเองชอ นคอตวอยางทใชในการ SHDLVAR = คอเลอกทจะบนทกเรมตนจดการ:
data_null_; %arminit(appname='xyz',getid=YES,txname='txn 1');run;
/* start transaction instance 1 and save the ID using shdlvar= */data_null_; %armstrt(shdlvar=savhdl1 );run;
61
/* start transaction instance 2 and save the ID using shdlvar= */data_null_;/*armstrt(shdlvar=savhd12 );run;
/* Now use the shandle= parameter after retrieving the first id. */data_null_; %armupdt(data='updating txn 1', shdlvar=savhdl1);run;
/* Use the same technique to stop the transactions *//* in the order they were started. */data_null_; %armstop(shdlvar=savhdl1); %armstop(shdlvar=savhdl2); %armend();run;
ในตวอยางกอนหนานแสดงใหเหนถงใชตวเลอก var * ลดความซบซอนของรหสเทคนคกอนหนานจะแนะนำาสำาหรบใชในทก ARM macro calls
ตวอยางตอไปนแสดงใหเหนถงวธการใชทงหมดของตวเลอก var * ไดโดยอตโนมตการจดการรหสสำาหรบการใชงานพรอมกน transaction classes, transaction instances และกรณรายการมความสมพนธ
data_null_; %arminit(appname='Appl 1', appuser='userid', appidvar=app1); %arminit(appname='Appl 2', appuser='userid', appidvar=app2); %arminit(appname='Appl 3', appuser='userid', appidvar=app3); run;
data_null_; %armgtid(txnname='Txn 1A', txndet='Txn Class 1A',appidvar=appl,txnidvar=txnidvar=txn1a); %armgtid(txnname='Txn 1B', txndet='Txn Class 1B',appidvar=appl,txnidvar=txnidvar=txn1b); %armgtid(txnname='Txn 2A', txndet='Txn Class 2A',appidvar=app2,txnidvar=txnidvar=txn2a); %armgtid(txnname='Txn 2B', txndet='Txn Class 2B',appidvar=app2,txnidvar=txnidvar=txn2b); %armgtid(txnname='Txn 3A', txndet='Txn Class 3A',appidvar=app3,txnidvar=txnidvar=txn3a); %armgtid(txnname='Txn 3B', txndet='Txn Class 3B',appidvar=app3,txnidvar=txnidvar=txn3b);run;
data_null_; %armstrt(txnidvar=txn1a,shdlvar=sh1a); %armstrt(txnidvar=txn1b,shdlvar=sh1b); %armstrt(txnidvar=txn2a,shdlvar=sh2a);
62
%armstrt(txnidvar=txn2b,shdlvar=sh2b); %armstrt(txnidvar=txn3a,shdlvar=sh3a); %armstrt(txnidvar=txn3b,shdlvar=sh3b);run;
data_null_; %armupdt(data='Updating txn instance 1a...', shdlvar=sh1a); %armupdt(data='Updating txn instance 1b...', shdlvar=sh1b); %armupdt(data='Updating txn instance 2a...', shdlvar=sh2a); %armupdt(data='Updating txn instance 2b...', shdlvar=sh2b); %armupdt(data='Updating txn instance 3a...', shdlvar=sh3a); %armupdt(data='Updating txn instance 3b...', shdlvar=sh3b); run;
data_null_; %armstop(status=0, shdlvar=sh1a); %armstop(status=1, shdlvar=sh1b); %armstop(status=0, shdlvar=sh2a); %armstop(status=1, shdlvar=sh2b); %armstop(status=0, shdlvar=sh3a); %armstop(status=1, shdlvar=sh3b); run;
data_null_; %armend(appidvar=app1); %armend(appidvar=app2);
%armend(appidvar=app3); run;
ในฐานะทเปนตวอยางกอนหนานแสดงใหเหนถงคณสามารถสรางแบบแผนของคณเองการตงชอเพอระบตวตนของโปรแกรมการเรยนรายการและกรณรายการขามการจดเตรยมขอมลทแตกตาง, ในรหสเปดหรอในโปรแกรม SCL
Macro สนบสนนการสงผานอยางชดเจนจากรหสการใช APPID = TXNID = และ SHANDLE เลอกตวเลอกเหลานจะคลายกบตวเลอก var *ยกเวนวาพวกเขาไมไดเรยกคนคาผานการจดเตรยมการใชขอมลตวแปร macro ใชหลกของตวเลอกคอการจดหาคาคงททเปนตวเลขเปนคา ID กบ macro เพราะตวเลอก var * ไมยอมรบคาคงททเปนตวเลข
หมายเหต: การใช APPID = TXNID = และ = SHANDLE ไมแนะนำาสำาหรบการใชงานใหมตวเลอกเหลานจะยงคงเขากนไดกบ ARM macros กอนหนานออกมาเพยง ใช APPIDVAR = TXNIDVAR = และ SHDLVAR = แทน APPID = TXNID = และ = SHANDLE ตามลำาดบ
63
เพราะรหสจะถกสรางโดยตวแทน ARM, ทจะผานทเปนตวเลขตวอกษรทคณตองชวงเรมตนใหม SAS ถามระบบยอย SAS นอกจากนยงมการทำางานของคณจะไมทราบวา ID จะเปนทเวลาดำาเนนการ
การใชงานของ APPIDVAR = TXNIDVAR = และ SHDLVAR = ตวเลอกจะแนะนำาเมอเขารหสการใชงานใหม
การกำาหนดตวชวดของผใชงานใน ARM macroตวชวดทเปนตอบโตวดตวเลข ID, หรออกขระทคณกำาหนด คณ
สามารถระบหนง หรอมากกวาตวชวดสำาหรบแตละชนรายการ ARM เมอชวงเรมตน (ตวอยางของชนรายการ) จะเรมตนการปรบปรง หรอหยด, การประยกตใชคาทบงชสำาหรบตวชวดและเขยนมนไปยงลอก ARM โดยตวแทน ARM
ชอผใชตวชวด และผใชกำาหนดตวชวดจะตองระบรวมกนใน ARMGTID% METRNAM1-7 = ชอผใชตวชวดและจะตองเปนตวแปรตวอกษร SAS หรอยกคาตวอกษรไดถงแปดตวอกษรความยาว METRDEF1-7 = กำาหนดผลลพธของการทผใชกำาหนดตวชวดคาของ METRDEF1-6 = ตองเปนหนงในตอไปน:COUNT32, COUNT64, COUNTDIV
ใชตวนบทจะรวมคาชวง ตวนบยงสามารถคำานวณคาเฉลยสงสดและตำาสดตอรายการและการคำานวณทางสถตอนๆ
GAUGE32, GAUGE64, GAUGEDIVใชวดเมอผลรวมของคาไมจำาเปนตอง วดสามารถคำานวณคาเฉลยสงสดและตำาสดตอรายการและการคำานวณทางสถตอน ๆ
ID32, ID64ใชตวเลข ID เพยงแคเปนตวระบ แตไมเปนคาการวดเชนรหสขอผดพลาดหรอรหสพนกงาน ไมมการคำานวณสามารถดำาเนนการไดเมอตวเลข ID
SHORTSTR, LONGSTR
64
ใชกำาหนด ID เปนตวระบ ไมมการคำานวณสามารถดำาเนนการกำาหนด ID
ขอจำากด : METRDEF7 = สามารถเทากบ LONGSTR และสามารถเปนสายยาวจาก 32 ไบต METRDEF1-6 ไมสามารถเทากบ LONGSTRหมายเหต: 32 และ 64 หมายถงจำานวนบตในตวนบวดตวหารหรอ ID
METRVAL1-7 = ARMSTOP สงคาของผใชกำาหนดตวชวดใหตวแทน ARM สำาหรบการเขาสระบบเมอใชใน ARMSTRT%, ARMUPDT% และ% คาของผใชกำาหนดตวชวดทตองเปนไปตามตวชวดทสอดคลองกนของผใชทกำาหนดไวใน ARMGTID%ตวอยางตอไปนแสดงใหเหนวาตวชวดทใช:
%let _armacro=1;
%arminit(appname='Sales App', appuser='userxyz');
/* name and define the user defined metrics */%armgtid(txnname='Sales Order', txndet='Sales Order Transaction', metrnam1=aname, metrdef1=count32); /* aname is the NAME of the metric and can be anything up to 8 characters */
/* start of user defined metric *//* initial value of the metric */%armstrt(metrval1=0);
datamyfile;../*some SAS statements*/.end=EOF;run;
/* value of the metric is the automatic observation */%armupdt(data='Sales transaction still running...',maconly=no, metrval1=_N_);
datamyfile;../*more SAS statements*/.if EOF then
/* value of the metric is at the highest observation count */%armstop(status=0, metrval1=_N_,maconly=no);run;
65
%armend;
นยาม Correlators ใน ARM Macrosหลกหรอรายการหลกจะมองคประกอบหลายหรอรายการลกทซอน
กนอยภายในไดรายการลกสามารถมรายการลกอนๆมนจะมประโยชนมากทจะรวารายการแตละรายการลกเพอกอใหเกดการตอบสนองเวลารวมของรายการหลกถาเกดความลมเหลวในรายการหลก, รทรายการลกมความลมเหลวนยงมขอมลทเปนประโยชน correlators จะใชในการตดตามทำารายการหลกและลกเหลาน
การใช Correlators ตองชวงเรมตนรายการทหลายจดการจะใชงานพรอมกนนตองใช CORR = และ SHDLVAR =ตวเลอกใน% ARMSTRT Macros คณกำาหนดหลกแตละคนและรายการลกใน % ARMSTRT Macros ใชตวเลอก SHDLVAR = สำาหรบรายการแตละรายการลกคณยงจะตองกำาหนดรายการหลกใชตวเลอก PARNTVAR =
รายการแตละรายการลกจะเรมตนหลงจากรายการหลกจะเรมตน ทำารายการหลกหรอลกสามารถจะเหมอนหรอตางกนในชนรายการคณกำาหนดคลาสการทำารายการใน% ARMGTID Macros ใชตวเลอก TXNIDVAR =
ทงรายการหลกและลกสามารถมการปรบปรงทระบไวใน% ARMUPDT Macros ตวชวดทของผใชงานสามารถระบไดสำาหรบทงสองประเภทรายการใน % ARMSTRT Macros ถาผใชตวชวดทถกกำาหนดไวในชนรายการทสอดคลองกนใน % ARMGTID Macros
ทกรายการลกตองหยดใน% ARMSTRT Macros กอนทจะรายการหลกหยด ทำารายการลกหลายสามารถหยดไดในลำาดบใด ๆ
ตวอยางเชนรายการหลกประกอบดวย 100 จาก 110 ทำารายการลก, 120, และ 130 แตละการดำาเนนการเปนสวนหนงทแตกตางกนของหนวยงานทแสดงโดยรายการหลก 100 รายการลก 120 มทำารายการลก 121 และ 122 200 รายการมรายการลกไมม ทนสวนของโคดทใชในการ
66
สรางความสมพนธเหลานคอ: %arminit(appname='Application",appidvar=appid);
%armgtid(appidvar=appid,txnname='TranCls',txndet='Transaction Class Def',txnidvar=txnid);%armstrt(txnidvar=txnid,corr=1,shdlvar=HDL100);%armstrt(txnidvar=txnid,corr=0,shdlvar=HDL200<,...user metrics>);%armstrt(txnidvar=txnid,corr=2,shldvar=HDL110,parntvar=HDL100);%armstrt(txnidvar=txnid,corr=3,shldvar=HDL120,parntvar=HDL100);%armstrt(txnidvar=txnid,corr=2,shldvar=HDL130,parntvar=HDL100);%armstrt(txnidvar=txnid,corr=2,shldvar=HDL121,parntvar=HDL120);%armstrt(txnidvar=txnid,corr=2,shldvar=HDL122,parntvar=HDL120);...%armstop(shdlvar=HDL200);%armstop(shdlvar=HDL121);%armstop(shdlvar=HDL122);%armstop(shdlvar=HDL120);%armstop(shdlvar=HDL130);%armstop(shdlvar=HDL110);%armstop(shdlvar=HDL100)
การเปดใชงานการประมวลผล ARM Macroการตงคาตวแปร Macro _ARMEXEC
ทงหมด ARM macros จะปดใชงานโดยคาเรมตนเพอแทรก ARM macros ภายในรหสนถกสรางขนทจะไมสงผลใหเกดโดยไมไดตงใจไมไมพงประสงค ทวไปเปดใชงานการทำางานของ ARM macros คณตองตงคาตวแปร macros _ARMEXEC ทวไปเพอคา 1 คาใด ๆ ทอน ๆ สำาหรบการปดการใชงาน macros _ARMEXEC ARM
มสองวธการตงคาตวแปร macros_ARMEXEC เปนวธแรกกำาหนดตวแปรในระหวางขนตอนการรวบรวมขอมลหรอโปรแกรมการใช SCL% LET:
%let _armexec = 1;ถาคา _ARMEXEC ไมไดรบการตงคาเปน 1 แลวรหสไมถกสรางขน
และมขอความทเขยนในบนทก:หมายเหต: macros ARMSTRT ขามโดย _armexecวธทสองของการตงคาตวแปร _ARMEXEC คอการใช SYMPUT
ระหวางการดำาเนนการ การตงคาตวแปร _ARMEXEC ในระหวางขนตอนของขอมลหรอการทำางานของโปรแกรม SCL:
67
callsymput('_armexec', '1');ดวยเทคนคน macros จะตรวจสอบตวแปร _ARMEXEC ใน
ระหวางการทำางานของโปรแกรมและฟงกชน ARM call รนหรอขามตามความเหมาะสม
การเปดใชงานการประมวลผล ARM Macro ดวย SCLในระหวางการรวบรวมหรอการดำาเนนการ - มสองวธของการตง
คาตวแปร macros_ARMEXEC วธการทงสองจะอธบายการตงคาตวแปร Macro _ARMEXEC หรอคณสามารถใชการรวมกนของวธการเหลาน ตวอยางเชนตง _ARMEXEC ถง 1 โดยใชเทคนคการรวบรวม (บางทใน autoexec ทเรมตน SAS) และแลวรหสเปนตวเลอกทเมนแบบเลอนลงหรอวธการอนในการสมครเพอเปด _ARMEXEC และปดแบบไดนามกโดยใช SYMPUT CALL
ใน SCL ถา _ARMEXEC ไมไดเปน 1 เมอโปรแกรมคอมไพล macros ทงหมดจะถกตงคาใหเปนโมฆะและอนเตอรเฟซ ARM จะไมสามารถใชไดจนกวาจะมการ recompiled กบ ชด _ARMEXEC ถง 1
นอกจากนเพอใหการรวบรวมทเหมาะสมของแมโคร ARM ภายใน SCL คณตองตงคาตวแปรแมโคร_ARMSCL ทวไปถง 1 กอนทจะออกแมโคร ARM ใด ๆ ตวแปรนยบยงรนของงบ DROP ซงเปนสงทไมถกตองใน SCL
การดำาเนน เงอนไข ARM Macroมนจะมประโยชนใหรหส ARM Macro ในโปรแกรมของคณแตพวก
เขาทจะดำาเนนการตอเมอจำาเปนเทานน แมโครทงหมด ARM สนบสนนระดบ =ตวเลอกทระบระดบการดำาเนนการของ Macro นนถามนเปนรหสแลวระดบการดำาเนนการของ Macro จะทำางานเมอเทยบกบสองตวแปร Macro ทวไป_ARMGLVL และ_ARMTLVL _ARMGLVL เปนระดบตวแปรทวไป Macro
68
ถาระดบ Value = บน ARM Macro นอยกวาหรอเทากบคา _ARMGLVL แลว Macro จะถกดำาเนนการ ถาระดบ value = บน ARM Macro มากกวาคา _ARMGLVL แลวดำาเนนการ ARM Macro ขาม /* Set the global level to 10 */
%let _armglvl = 10;
data_null_; %arminit(appname='Appl 1', appuser='userid' ); %armgtid(txnname='Txn 1', txndet='Transaction #1 detail' );
/* These macros are executed */ %armstrt( level=9 ); %armstop( level=9 );
/* These macros are executed */ %armstrt( level=10 ); %armstop( level=10 );
/* These macros are NOT executed */ %armstrt( level=11 ); %armstop( level=11 );
%armendrun;
_ARMTLVL เปนเปาหมายระดบตวแปร Macro ทำางานคลายกบ ARMGLVL ยกเวน value = ระดบ ARM Macro จะตองเทากบ _ARMTLVL value สำาหรบ Macro ทจะดำาเนนการ:
/* Set the target level to 10 */%let _armtlvl = 10;
data_null_; %arminit(appname='Appl 1', appuser='userid' ); %armgtid(txnname='Txn 1', txndet='Transaction #1 detail' );
/* These macros are NOT executed */ %armstrt( level=9 ); %armstop( level=9 );
/* These macros are executed */ %armstrt( level=10 ); %armstop( level=10 );
/* These macros are NOT executed */ %armstrt( level=11 ); %armstop( level=11 );
%armendrun;
69
ระดบ = ตวเลอกทสามารถวางบน ARM Macro ใด ๆ และนแนะนำาเปนอยางยง จะชวยใหคณสามารถออกแบบในระดบทละเอยดยงขนจากการเขาสระบบทสามารถใชเปนอปกรณทมประสทธภาพกรองขอมลโดยการเขาสระบบขอมลเพยงเทาทคณตองการ ถาคณตงคาทงสอง _ARMGLVL _ARMTLVL และในเวลาเดยวกนแลวคาทงสองจะเทยบกบการตรวจสอบวา Macro ควรจะดำาเนนการหรอไม
การตงคา Macro Environmentคณตงคา Macro Environment โดยใชตวแปร _ARMACRO
มคา 1 หรอ 0 คา 1 ระบวา ARM Macro ทงหมด ARM เกดขนในรหสเปดและคา 0 ระบวา ARM Macro เกดขนเฉพาะในการจดเตรยมขอมล คณใชตวเลอก MACONLY = ถา ARM Macro บคคลไมไดอยดานนอกของสภาพแวดลอมของโลกทกำาหนดโดยการตงคา _ARMACRO สำาหรบโปรแกรม SCL คณระบ _ARMSCL มมลคา 1
ตารางตอไปนแสดงใหเหนถง Value สวนกลางตวเลอกชวคราวทจำาเปนและผล
การใช _ARMACRO _ARMSCL และการตงคา ARM Macro Environment
Global Value Temporary Option
Result
%let _ARMACRO=0
;
MACONLY=NO macro is in DATA step
%let _ARMACRO=1
;
MACONLY=YES macro is in open code
%let none macro is in
70
_ARMSCL=1; SCL%let
_ARMSCL=0;none macro is not
in SCLตวอยางตอไปนแสดงใหเหนถงวธการตงคา macro environment ในจดเตรยมขอมล:
/* set global environment */%let _armacro = 1;data_null_; %arminit(appname='Appl 1', appuser='user1', appidvar=appl, maconly=no);/* exception to global value */run;
/* using global setting *//* maconly= parameter not needed */ %armgtid(txnname='Txn 1A', txndet='Txn Class 1A', appidvar=appl, txnidvar=txn1a);???????????????????????????????????????????? macro environment???????? SCL autoexec:/* set global environment */%let _armscl = 1;%let _armexec = 1;???????????????????????????????????????????? macro environment ?? SCL:init: %arminit(appname='Appl 1', appuser='user1', appidvar=appl); %armgtid(txnname='Txn 1A', txndet='Txn Class 1A', appidvar=appl, txnidvar=txn1a);return;main: %armstrt(txnidvar=txn1a,shdlvar=strt1);return;term: %armstop(shdlvar=strt1); %armend(appidvar=app1);return;
การใช macro หลงการประมวลผล ARMหลงการประมวลผล ARM macros นอกจากนยงม เหลาน ARM
macros ระบถงการดำาเนนการตาม ARM SAS พวกเขาจะไมไดเปนสวนหนงของ ARM API มาตรฐาน
หลงจากเขาสระบบขอมลประสทธภาพการทำางานไปยง ARM log,แลวคณสามารถใช ARM macros ในการอานบนทกและสรางขอมล
71
SAS ชดสำาหรบการรายงานและการวเคราะห ชอเรมตนของไฟลจะถก ARMLOG.LOG เพอระบไฟลทสงออกทแตกตางกนใชตวเลอก ARMLOC ระบบ = ม3 macros หลงการประมวลผล ARM คอ:
%ARMCONV Macro แปลงลอก ARM ถกสรางขนใน SAS 9 หรอในภายหลงซงจะเปนรปแบบทเรยบงายเปนปายกำากบ = รปแบบ ARM รายการทใชใน SAS 8.2
%ARMPROC Macro เขาสระบบการประมวลผล ARM และผลหก SAS ชดขอมลทมขอมลจากบนทก ทจะประมวลผล ARM บนทกทมนยาม metadata ใชเกยวกบรายการการเรยนและคาขอมลของผใชในการเรมตนการจดการปรบปรงและหยดทำารายการ
%ARMJOIN Macro กระบวนการหกชดขอมล SAS ทสรางขนโดย ARMPROC% และสรางชดขอมลและมมมอง SQL ทมขอมลทวไปเกยวกบการใชงานและรายการ
สำาหรบ SAS 9 หรอตอมาในรปแบบทเรยบงายของบนทกเขาสระบบ ARM เปนทคนดวยเครองหมายจลภาคซงประกอบดวยจากคอลมนของขอมลทแยกออกจากกนดวยเครองหมายจลภาคตราประทบวนทและเวลาและ ตวระบการเรยกเสมอปรากฏในตำาแหนงคอลมนเดยวกน
รปแบบทใชใน SAS 8.2 คอ ปายกำากบเทากบแบบรายกาและจะงายตอการอาน แตนาเสยดายทSAS ใชเวลามากเวลาการจดรปแบบอกขระและเรองนมผลกระทบตอประสทธภาพการทำางาน ใน SAS 9 หรอในภายหลงบนทก ARM สามารถเปรยบเทยบกบ SAS 8.2ARM log โดยใชวธการดงตอไปน:
1. คณสามารถสราง SAS 9 หรอ ARM log ตอมาและประมวลผลโดยใช SAS 9 หรอ ARMPROC% ในภายหลงและ ARMJOIN%สงผลใหชดขอมลทมสถตสมบรณสำาหรบการสนสดของการจดการชวงเรมตนและจดสนสดของการประยกตใช
72
2. การแปลง SAS 9 หรอในภายหลงแบบลอก ARM SAS 8.2 รปแบบทคณใช SAS ARM macro% ARMCONV
คำาสง
คำานยามของคำาสง
คำาสงของ SAS เปนชดคำาสงทอาจจะรวมถงคำาหลก ชอคำาสง ตวอกษรพเศษ คำาสงของ SAS ทงหมดจะสนสดดวยการปฏบตของการทำางาน SAS หรอการใหขอมลระบบ
สวนนจะครอบคลมสองชนดคำาสง SAS
ผทนำาขนตอนมาใชในการเขยนโปรแกรม ผคนทอยทวโลกสามารถใชโปรแกรม SAS ในทใดกได
ขนตอนวธการใชSAS ใหคำาอธบายรายละเอยดของคำาสง SAS ทมในแตละขนตอนของ SAS โดยเฉพาะ การสงออกของขอมลของ SAS คมอการใชงานจะชวยอธบายรายละเอยดของ output
การปฏบตการและการอธบายขนตอนคำาสงของขอมล
การปฏบตการและการอธบายขนตอนคำาสงของขอมลเปนชดคำาสงในการปฏบตการในแตละขนตอนขอมลบายอยางจะมการทำาซำา
ตารางตอไปน แสดงปฏบตการและอธบายคำาสงทคณสามารถใชในขนตอนขอมล SAS
การปฏบตการในขนตอนของขอมล
73
Executable StatementsABORT IF, Sub set ting PUTAssignment IF-THEN/ELSE PUT, ColumnCALL INFILE PUT, FormattedCONTINUE INPUT PUT, ListDECLARE INPUT, Column PUT, NamedDELETE INPUT, Formatted PUT, _ODS_DESCRIBE INPUT, List PUTLOGDISPLAY INPUT, Named REDIRECTDO LEAVE REMOVEDO, Iterative LINK REPLACEDO Until LIST RETURNDO While LOSTCARD SELECTERROREXECUTE
MERGEMODIFY
SETSTOP
FILE _NEW_ SumFILE, ODS Null UPDATEGO TO OUTPUT
ขนตอนการอธบายคำาสงของขอมล
การอธบายคำาสงARRAY DATALINES LABELArray Reference DATALINES4 Labels,
74
StatementATTRIB DROP LENGTHBY END RENAMECARDS FORMAT RETAINCARDS4 INFORMAT WHEREDATA KEEP WINDOW
คำาสงทวโลก
คำาสงทวโลกโดยทวไปมการใหขอมลกบระบบ SAS มการขอขอมลหรอขอมลทเคลอนยายไปมาระหวางโหมดทแตกตางกนของการดำาเนนการ ระบบคำาสงมการสงออกในรปแบบทหลากหลาย เชน ในรปแบบ Hypertext markup สามารถใชคำาสงใดกไดในโปรแกรม SAS คำาสงทวไปจะไมดำาเนนการสงเหลานจะมผลทนททระบบ SAS มการรวบรวมในโปรแกรม
นอกจากน SAS เปนผลตภณฑ ของชดคำาสงซอฟแวร สำาหรบขอมลเพมเตมโปรดดทเอกสาร SAS สำาหรบผลตภณฑเหลานน
ตวเลอกระบบ SAS
นยามของตวเลอก ระบบ SAS
75
ตวเลอกระบบเปนคำาสงทมผลกระทบตอชอ SAS ของคณ พวกเขาควบคมวธการท SAS ทำาการดำาเนนการ เชน ระบบเตรยม SAS, ฮารดแวรและซอฟแวรเชอมตอ, และใสคา, การประมวลผล, และการสงออกของงานและ ไฟลSAS
ไวยากรณของ ตวเลอก ระบบ SAS ไวยากรณ สำาหรบการระบ ตวเลอกระบบ ในคำาสง ตวเลอก คอ Option(s);นคอคำาอธบาย ของไวยากรณคอ :
การเลอกระบ หนงหรอมากกวาหนง ตวเลอกระบบ SAS ทคณ ตองการเปลยนตวอยางตอไปน แสดงวธการใชตวเลอกระบบ NODATE และ linesize = ในคำาสงเลอก
options nodate linesize=72;ขอมลการดำาเนนงานบนบรรทดคำาสง หรอ ใน แฟมการกำาหนดคา, ไวยากรณเปนเฉพาะกบ สภาพแวดลอมการทำางาน ของคณ สำาหรบ รายละเอยดโปรดดเอกสาร SAS สำาหรบ สภาพแวดลอมการทำางานของคณ
การใชตวเลอก ระบบ SAS
ตงคาเรมตน
ขอมล การดำาเนนงาน สงแวดลอม ตวเลอกระบบ SAS จะเรมตน ดวยการตงคา เรมตนเมอ SAS ถกเรยก อยางไรกตามการ ตงคาเรมตน สำาหรบบางสวน ตวเลอกระบบ SAS จะแตกตางกนไป ทง สภาพแวดลอมการทำางาน และ เวบไซต สำาหรบ รายละเอยดโปรดดเอกสาร SAS สำาหรบ สภาพแวดลอมการทำางานของคณ
76
การพจารณาลกษณะการตงคาจะมผล
เพอพจารณาวาการตงคาจะมผลสำาหรบ SAS ตวเลอกระบบใชหนงในตอไปน:
ตวเลอกระบบ OPLIST
เขยนจดหมายถง SAS เขาสระบบ การตงคาท ถก ระบไวใน บรรทด คำาสง SAS invocation
VERBOSEเขยนไปยง SAS เขาสระบบตวเลอกระบบทถกระบไวในแฟมการ
กำาหนดคาและบนบรรทดคำาสง
SAS รองขอ
หนาตางของระบบตวเลอก SAS
รายการทงหมด ตงคาตวเลอก ระบบ
ขนตอน OPTIONS
เขยน ตงคาตวเลอก ระบบบนทก SAS เพอแสดง การตงคาของ ตวเลอกระบบ ดวยฟงกชนการ
ทำางาน ทเฉพาะเจาะจงเชน การจดการ ขอผดพลาด ใช GROUP= option:
proc options GROUP=errorhandling;
run;
ฟงกชน GETOPTION
สงกลบคาของตวเลอกระบบทระบไว
77
ตาราง พจนานกรม VOPTION
รายการใน SASHELP library, ทงหมดตงคาตวเลอกระบบในปจจบน คณสามารถดตารางนกบ SAS
Explorer, หรอคณสามารถดงขอมลจากตาราง VOPTION ใช PROC SQL ตาราง dictionary.options SQL
เขาถงไดดวยขนตอน SQL, แสดงรายการตวเลอกของระบบทมผล
การกำาหนด ตวเลอก ระบบ SAS ถก จำากด
เพอตรวจสอบวา ตวเลอกระบบ ถก จำากด โดยผดแลระบบ ของคณใชตวเลอกจำากดของขนตอน ตวเลอก ตวเลอกท จำากด การแสดง คาตวเลอก ของขอบเขตและ วธการทมน ถกกำาหนด ใน ตวอยางตอไปนSAS Log แสดงใหเหนวามเพยงหนงตวเลอก CMPOPT,มการ จำากด :
proc options restrict;
run;
ตวเลอกขอมลทจำากด1 proc options restrict;2 run; SAS (r) Proprietary Software Release 9.1 TS1B0
Option Value Information For SAS Option CMPOPT Option Value: (NOEXTRAMATH NOMISSCHECK NOPRECISE NOGUARDCHECK) Option Scope: SAS Session How option value set: Site Administrator Restricted
ตวเลอก จะแสดงขอมล น สำาหรบ ตวเลอกทงหมด ทถก จำากด หากผดแล เวบไซตของคณได ไมได จำากด ตวเลอก ใด ๆ แลวขอความตอไปน จะปรากฏในบนทกของ SAS:
78
Your site administrator has not restricted any options.
การกำาหนดวธมลคา SAS ตวเลอก การตงคา ระบบ
เพอตรวจสอบวาคาตวเลอกการตงคาระบบใชขนตอนตวเลอกทมตวเลอกมลคาทระบไวในคำาสงตวเลอก ตวเลอกมลคาแสดงคาตวเลอกทกำาหนดและขอบเขต ตวอยางเชนคำาสงตอไปนเขยนขอความลงในบนทก SAS ทจะบอกคณวาคาตวเลอกสำาหรบ CENTER ตวเลอกถกจดตงระบบ:
proc options option=center value;
run;
ดงตอไปนLog SAS บางสวนแสดงใหเหนวาคาตวเลอกสำาหรบ CENTER เปนคาเรมตนทจดสงโดยผลลพธ
การเลอก คา ขอมลสำาหรบตวเลอกระบบ CENTER2 proc options option=center value;
3 run;
Option Value Information for SAS Option CENTER
Option Value: CENTER
Option Scope: NoReb
How option value set: Shipped Default
การไดรบ ขอมลรายละเอยด เกยวกบตวเลอก ระบบ
คณสามารถ ไดรบ ขอมลรายละเอยด พนฐาน เกยวกบตวเลอก ของระบบโดยการระบ ตวเลอกโดยการระบตวเลอก DEFINE ใน PROC คำาสง OPTIONS
79
ตวเลอก DEFINE เขยนขอมลรายละเอยด เกยวกบตวเลอก ดงตอไปน ระบบการบนทก SAS :
ลกษณะ ชนด เมออยใน SAS session สามารถตงคา
ตวอยางเชนคำาสงตอไปนเขยนขอความลงในบนทก SAS ทมขอมลรายละเอยดเกยวกบตวเลอก CENTER ระบบ:
proc options option=center define;
run;
ซง Log SAS บางสวนจะบอกขอมลเฉพาะเกยวกบตวเลอกระบบ CENTERขอมลอธบายสำาหรบ CENTER ตวเลอกระบบ1 proc options option=center define;
2 run;
CENTER
Option Definition Information for SAS Option CENTER
Group= LISTCONTROL
Group Description: Procedure output and display settings
Description: Center SAS procedure output
Type: The option value is of type BOOLEAN
When Can Set: Startup or anytime during the SAS Session
Restricted: Your Site Administrator can restrict modification of this option
Optsave: Proc Optsave or command Dmoptsave will save this option.
การเปลยน การตงคา ตวเลอก SAS ระบบ ใหตงคาเรมตนสำาหรบตวเลอกระบบ SAS คณสามารถแทนทการ
ตงคาเรมตนของตวเลอกระบบทไม จำากด ทงนขนอยกบการทำางานของระบบตวเลอกทคณสามารถระบการตงคาในวธใดวธหนงตอไปน:
80
บนบรรทดคำาสง: คณสามารถระบ การตงคา ใด ๆ ไม จำากด SAS ตวเลอก ระบบ ทงบนบรรทดคำาสง SAS หรอ ใน แฟมการกำาหนดคา ถาคณใช การตงคา ตวเลอกเดยวกน บอยครง กมกจะ สะดวกในการ ระบตวเลอกใน แฟมการกำาหนดคามากกวา บนบรรทดคำาสง ทงสองวธ การตงคา ตวเลอกระบบ ของคณในระหวาง SAS invocation หลาย SAS ตงคาตวเลอก ระบบ สามารถระบ เฉพาะในชวง SAS รองขอคำาอธบาย ของตวเลอก แตละคนใหรายละเอยด
ในแฟมการกำาหนดคา: ถาคณใช การตงคา ตวเลอกเดยวกน บอยครง กมกจะ สะดวกในการ ระบตวเลอกในแฟมการกำาหนดคามากกวา บนบรรทดคำาสง
ในคำาสงทเลอกคณสามารถระบตวเลอก คำาสง ไดตลอดเวลา ในชวง session ยกเวน ภายใน สายขอมล เสนหรอ parmcard การตงคา ยงคงมผล ตลอด โปรแกรม ปจจบนหรอ กระบวนการ จนกวาคณจะ ตงคาดวย อก คำาสง ตวเลอก หรอ เปลยน ในหนาตาง ระบบ SAS ตวเลอก คณยงสามารถวางคำาสง ตวเลอก ใน ไฟล autoexec
ในระบบ SAS หนาตางตวเลอก : ถาคณอยใน windowing environment เลอกชนดในกลองหรอบนบรรทดคำาสงเพอเปดหนาตางระบบ SAS ตวเลอกระบบ SAS หนาตางตวเลอกแสดงชอของ SAS กลมตวเลอกระบบ จากนนคณสามารถขยายกลมเพอดชอตวเลอกและการเปลยนแปลงการตงคาปจจบนของพวกเขา หรอคณสามารถใชคำาสงตวเลอกคนหาตวเลอกในเมนผดขนทจะไปโดยตรงไปยงตวเลอก การเปลยนแปลงจะมผลทนทและยงคงมผลตลอดทง session จนกวาคณจะตงคาพวกเขาดวยคำาสงตวเลอกหรอเปลยนพวกเขาในหนาตางระบบ SAS ตวเลอก
ขอมลสภาพแวดลอมในการดำาเนนงาน : บน UNIX, Open VMS,และ z/OS hosts,ตวเลอกระบบ SAS สามารถถก จำากด ไดโดยผดแลเวบไซตเพอใหพวกเขาไมสามารถเปลยนแปลงไดโดยผใช ทงนขนอย
81
กบสภาพแวดลอมการปฏบตการของคณตวเลอกระบบสามารถ จำากดสากลโดยกลมหรอโดยผใช คณสามารถใชขนตอนในการตรวจสอบตวเลอกตวเลอกทถก จำากด สำาหรบขอมลเพมเตมเกยวกบวธการทจะ จำากด ตวเลอกใหดทคมอกำาหนดคาสำาหรบสภาพแวดลอม SAS ปฏบตการของคณ สำาหรบขอมลเพมเตมเกยวกบขนตอนการเลอกดเอกสาร SAS สำาหรบสภาพแวดลอมการปฏบตการของคณ
วธ การตงคา ตวเลอก ระบบ ระยะยาว จะมผล
เมอคณระบการตงคา ตวเลอก SAS ระบบการตงคาสามารถใชไดกบทก ขนตอน ทตามมา สำาหรบระยะเวลาของ session SAS หรอจนกวาคณจะ ตงคา ดงทแสดง:
data one;
set items;
run;
/* option applies to all subsequent steps */
options obs=5;
/* printing ends with the fifth observation */
proc print data=one;
run;
/* the SET statement stops reading
after the fifth observation */
data two;
set items;
run;
หากตองการอาน มากกวาหา ขอสงเกต คณ ตองตงคา ตวเลอก ระบบ OBS = สำาหรบขอมล เพมเตมเกยวกบ OBS= System Option ,ด อางองภาษา SAS: พจนานกรม
82
ตามลำาดบความสำาคญ
ถาตวเลอก ระบบปรากฏอยใน มากกวาหนง สถานท ตามลำาดบความสำาคญจาก สงสดไปตำาสด จะเปนดงน:
1 คำาสง ตวเลอกและ หนาตาง ระบบ SAS ตวเลอก
2 ไฟล autoexec ( ทมคำาสง OPTIONS )
3 ขอกำาหนด บรรทดคำาสง
4 ขอกำาหนด แฟมการกำาหนดคา
5 SAS ตงคาเรมตน ระบบ
ขอมล การดำาเนนงาน ดานสงแวดลอม : ในบางสภาพแวดลอม ในการดำาเนนงาน คณสามารถระบ ตวเลอกระบบ ใน สถานทอน ๆ ดเอกสาร SAS สำาหรบ สภาพแวดลอมการทำางาน ของคณ
ตามลำาดบความสำาคญ สำาหรบ SAS ตวเลอก โหมด การประมวลผล แสดงใหเหนถง ลำาดบความสำาคญ วา SAS ใช สำาหรบตวเลอก โหมด การทำางาน ตวเลอกเหลาน เปนสวน ของตวเลอกการ SAS invocation และมการ ระบในบรรทด คำาสงในระหวาง การ SAS invocation
ตามลำาดบความสำาคญ สำาหรบ SAS ตวเลอก โหมด การประมวลผล
Execution Mode Option PrecedenceOBJECTSERVER HighestDMR 2ndINITCMD 3rdDMS 3rdDMSEXP 3rdEXPLORER 3rdลำาดบความสำาคญ ของ SAS เลอก โหมด การทำางาน ประกอบดวย กฎตอไปน:
83
SAS ใชตวเลอกโหมด การทำางาน ทมความสำาคญสงสด ถาคณระบ มากกวาหนง ตวเลอกโหมด การดำาเนนการของ
ลำาดบเทากน , SAS ใชเพยง ตวเลอกสดทาย ทระบไวการตอบโตตอบการตงคาของตวเลอกขอมล
บาง ตวเลอกระบบ ใชชอ เดยวกบตวเลอก ชด ขอมล ทมฟงกชน เดยวกน ตวเลอกระบบ ยงคงมผล สำาหรบทก ขนตอน ของขอมลและ ขนตอน PROC ใน SAS session จนกระทง การตงคา ของพวกเขา ทมการเปลยนแปลง ตวเลอก ชด ขอมล แต แทนท ตวเลอก ระบบเฉพาะขอมล เฉพาะ ทกำาหนดไว ในขนตอน ทมน ปรากฏขน
ในตวอยางน OBS = ตวเลอกระบบ ระบในคำาสง OPTIONS ระบวามเพยง 100 คนแรกทสงเกตจะไดรบการอานจากขอมลใด ๆ ทตงอยภายในงาน SASOBS = ตวเลอกชดขอมลในคำาสง SET แตแทนทตวเลอกระบบและระบวามเพยง 5 ครงแรกทสงเกตจะอานจากขอมลสองชดขนตอน PROC PRINT ใชการตงคาตวเลอกระบบและอานและพมพ 100 คนแรกทสงเกตจากชดขอมลทTHREE:
options obs=100;
data one;
set two(obs=5);
run;
proc print data=three;
run;
การเปรยบเทยบ
หมายเหต : ความแตกตางระหวาง ตวเลอกระบบ ขอมล ตงคาตวเลอก และตวเลอก คำาสง
84
ตวเลอกระบบ
ยงคงมผล สำาหรบ ขอมลทงหมด และขนตอน PROC ในงาน SAS หรอ กระบวนการปจจบน จนกวาจะมการ respecified
ขอมลการ ตงคาตวเลอก
นำาไปใชกบ การประมวลผลของชด ขอมล SAS กบทพวกเขา ปรากฏ บาง ขอมลท ตงคาตวเลอก มตวเลอก ระบบ ทสอดคลองกน หรอตวเลอก คำาสง LIBNAME สำาหรบชด ขอมลท แตละทาน สามารถใชตวเลอก ชด ขอมลไป แทนทการตงคา ตวเลอกอน ๆ เหลาน
เลอกคำาสง
ควบคมการดำาเนนการของคำาสงทปรากฏตวเลอกในคำาสงทวโลก เชน ในคำาสง LIBNAME ทสามารถมผลกระทบในวงกวาง