2015-08-17 102 views
1

我寫了一個非常強大的程序,允許用戶與SAS中的%窗口函數進行交互。不同屏幕分辨率的頁面大小和行大小標準%window

現在,它工作得很好,我很滿意我達到的結果。但是當我將這個程序發送給一些應該運行它的用戶時,他們發現並不是所有的文本都在output-Window中被提交。 經過一番嘗試後,我發現我的程序打算在我的PC分辨率1280x1024(不太好)以及我的linesize和pagesize標準選項下運行。

這些其他用戶正在使用具有不同分辨率的系統,例如,其中一個用戶使用的筆記本電腦的尺寸爲1366x768,他明顯地看到一部分窗口與內容分離。 即使她試圖設置我的行和頁面大小(我使用%put%sysfunc(getoption(linesize));)她仍然看不到整個窗口。

我該如何處理這類問題?如何爲每種不同的分辨率找到不同輸出尺寸的文檔?

我知道我應該發佈一些代碼嘗試,但這不是代碼請求,但我不認爲這個問題是完全與代碼相關的。也許你們中有人曾經有過這方面的經驗。

謝謝。

編輯:我想使用SAS-AF,但我沒有它的許可證。

SAMPLE WINDOW CODE: 
%macro windows(); 
     %window thiswindow 

       #2 @5 "/-----------------------------------------------------------------------------\" 
       #3 @5 "|------------------xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-------------------|" 
       #4 @5 "|------------------------------------------------------------xxxxxxxxxxxxxx---|" 
       #5 @5 "| xxxxxxxxxxx" 
       #5 @83 "|" 
       #6 @5 "| xxxxxxxxxxxxx" 
       #6 @83 "|" 
       #7 @5 "| xxxxxx" 
       #7 @45 " xxxxxxxxxxxx" 
       #7 @83 "|" 
       #8 @5 "\-----------------------------------------------------------------------------/" 

       #10 @2 "001"    
       #10 @7 "&macrovar1" 
       #10 @45 "041" 
       #10 @50 "&macrovar41" 
       #10 @88 "081" 
       #10 @93 "&macrovar81" 

       #11 @2 "002" 
       #11 @7 "&macrovar2" 
       #11 @45 "042" 
       #11 @50 "&macrovar42" 
       #11 @88 "082" 
       #11 @93 "&macrovar82" 

       #12 @2 "003" 
       #12 @7 "&macrovar3" 
       #12 @45 "043" 
       #12 @50 "&macrovar43" 
       #12 @88 "083" 
       #12 @93 "&macrovar83" 

       #13 @2 "004" 
       #13 @7 "&macrovar4" 
       #13 @45 "044" 
       #13 @50 "&macrovar44" 
       #13 @88 "084" 
       #13 @93 "&macrovar84" 

       #14 @2 "005" 
       #14 @7 "&macrovar5" 
       #14 @45 "045" 
       #14 @50 "&macrovar45" 
       #14 @88 "085" 
       #14 @93 "&macrovar85" 

       #15 @2 "006" 
       #15 @7 "&macrovar6" 
       #15 @45 "046" 
       #15 @50 "&macrovar46" 
       #15 @88 "086" 
       #15 @93 "&macrovar86" 

       #16 @2 "007" 
       #16 @7 "&macrovar7" 
       #16 @45 "047" 
       #16 @50 "&macrovar47" 
       #16 @88 "087" 
       #16 @93 "&macrovar87" 

       #17 @2 "008" 
       #17 @7 "&macrovar8" 
       #17 @45 "048" 
       #17 @50 "&macrovar48" 
       #17 @88 "088" 
       #17 @93 "&macrovar88" 

       #18 @2 "009" 
       #18 @7 "&macrovar9" 
       #18 @45 "049" 
       #18 @50 "&macrovar49" 
       #18 @88 "089" 
       #18 @93 "&macrovar89" 

       #19 @2 "010" 
       #19 @7 "&macrovar10" 
       #19 @45 "050" 
       #19 @50 "&macrovar50" 
       #19 @88 "090" 
       #19 @93 "&macrovar90" 

       #20 @2 "011" 
       #20 @7 "&macrovar11" 
       #20 @45 "051" 
       #20 @50 "&macrovar51" 
       #20 @88 "091" 
       #20 @93 "&macrovar91" 

       #21 @2 "012" 
       #21 @7 "&macrovar12" 
       #21 @45 "052" 
       #21 @50 "&macrovar52" 
       #21 @88 "092" 
       #21 @93 "&macrovar92" 

       #22 @2 "013" 
       #22 @7 "&macrovar13" 
       #22 @45 "053" 
       #22 @50 "&macrovar53" 
       #22 @88 "093" 
       #22 @93 "&macrovar93" 

       #23 @2 "014" 
       #23 @7 "&macrovar14" 
       #23 @45 "054" 
       #23 @50 "&macrovar54" 
       #23 @88 "094" 
       #23 @93 "&macrovar94" 

       #24 @2 "015" 
       #24 @7 "&macrovar15" 
       #24 @45 "055" 
       #24 @50 "&macrovar55" 
       #24 @88 "095" 
       #24 @93 "&macrovar95" 

       #25 @2 "016" 
       #25 @7 "&macrovar16" 
       #25 @45 "056" 
       #25 @50 "&macrovar56" 
       #25 @88 "096" 
       #25 @93 "&macrovar96" 

       #26 @2 "017" 
       #26 @7 "&macrovar17" 
       #26 @45 "057" 
       #26 @50 "&macrovar57" 
       #26 @88 "097" 
       #26 @93 "&macrovar97" 

       #27 @2 "018" 
       #27 @7 "&macrovar18" 
       #27 @45 "058" 
       #27 @50 "&macrovar58" 
       #27 @88 "098" 
       #27 @93 "&macrovar98" 

       #28 @2 "019" 
       #28 @7 "&macrovar19" 
       #28 @45 "059" 
       #28 @50 "&macrovar59" 
       #28 @88 "099" 
       #28 @93 "&macrovar99" 

       #29 @2 "020" 
       #29 @7 "&macrovar20" 
       #29 @45 "060" 
       #29 @50 "&macrovar60" 
       #29 @88 "100" 
       #29 @93 "&macrovar100" 

       #30 @2 "021" 
       #30 @7 "&macrovar21" 
       #30 @45 "061" 
       #30 @50 "&macrovar61" 
       #30 @88 "101" 
       #30 @93 "&macrovar101" 

       #31 @2 "022" 
       #31 @7 "&macrovar22" 
       #31 @45 "062" 
       #31 @50 "&macrovar62" 
       #31 @88 "102" 
       #31 @93 "&macrovar102" 

       #32 @2 "023" 
       #32 @7 "&macrovar23" 
       #32 @45 "063" 
       #32 @50 "&macrovar63" 
       #32 @88 "103" 
       #32 @93 "&macrovar103" 

       #33 @2 "024" 
       #33 @7 "&macrovar24" 
       #33 @45 "064" 
       #33 @50 "&macrovar64" 
       #33 @88 "104" 
       #33 @93 "&macrovar104" 

       #34 @2 "025" 
       #34 @7 "&macrovar25" 
       #34 @45 "065" 
       #34 @50 "&macrovar65" 
       #34 @88 "105" 
       #34 @93 "&macrovar105" 

       #35 @2 "026" 
       #35 @7 "&macrovar26" 
       #35 @45 "066" 
       #35 @50 "&macrovar66" 
       #35 @88 "106" 
       #35 @93 "&macrovar106" 

       #36 @2 "027" 
       #36 @7 "&macrovar27" 
       #36 @45 "067" 
       #36 @50 "&macrovar67" 
       #36 @88 "107" 
       #36 @93 "&macrovar107" 

       #37 @2 "028" 
       #37 @7 "&macrovar28" 
       #37 @45 "068" 
       #37 @50 "&macrovar68" 
       #37 @88 "108" 
       #37 @93 "&macrovar108" 

       #38 @2 "029" 
       #38 @7 "&macrovar29" 
       #38 @45 "069" 
       #38 @50 "&macrovar69" 
       #38 @88 "109" 
       #38 @93 "&macrovar109" 

       #39 @2 "030" 
       #39 @7 "&macrovar30" 
       #39 @45 "070" 
       #39 @50 "&macrovar70" 
       #39 @88 "110" 
       #39 @93 "&macrovar110" 

       #40 @2 "031" 
       #40 @7 "&macrovar31" 
       #40 @45 "071" 
       #40 @50 "&macrovar71" 
       #40 @88 "111" 
       #40 @93 "&macrovar111" 

       #41 @2 "032" 
       #41 @7 "&macrovar32" 
       #41 @45 "072" 
       #41 @50 "&macrovar72" 
       #41 @88 "112" 
       #41 @93 "&macrovar112" 

       #42 @2 "033" 
       #42 @7 "&macrovar33" 
       #42 @45 "073" 
       #42 @50 "&macrovar73" 
       #42 @88 "113" 
       #42 @93 "&macrovar113" 

       #43 @2 "034" 
       #43 @7 "&macrovar34" 
       #43 @45 "074" 
       #43 @50 "&macrovar74" 
       #43 @88 "114" 
       #43 @93 "&macrovar114" 

       #44 @2 "035" 
       #44 @7 "&macrovar35" 
       #44 @45 "075" 
       #44 @50 "&macrovar75" 
       #44 @88 "115" 
       #44 @93 "&macrovar115" 

       #45 @2 "036" 
       #45 @7 "&macrovar36" 
       #45 @45 "076" 
       #45 @50 "&macrovar76" 
       #45 @88 "116" 
       #45 @93 "&macrovar116" 

       #46 @2 "037" 
       #46 @7 "&macrovar37" 
       #46 @45 "077" 
       #46 @50 "&macrovar77" 
       #46 @88 "117" 
       #46 @93 "&macrovar117" 

       #47 @2 "038" 
       #47 @7 "&macrovar38" 
       #47 @45 "078" 
       #47 @50 "&macrovar78" 
       #47 @88 "118" 
       #47 @93 "&macrovar118" 

       #48 @2 "039" 
       #48 @7 "&macrovar39" 
       #48 @45 "079" 
       #48 @50 "&macrovar79" 
       #48 @88 "119" 
       #48 @93 "&macrovar119" 

       #49 @2 "040" 
       #49 @7 "&macrovar40" 
       #49 @45 "080" 
       #49 @50 "&macrovar80" 
       #49 @88 "120" 
       #49 @93 "&macrovar120" 


       #52 @5 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 
       #53 @5 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 
       #54 @5 "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 

       #55 @5 ncoded 80 attr=underline; 
%mend; 

然後我填充每個宏變量逐步與數據集的前120個觀測使用:

%let rc= %sysfunc(open(dataset)); 
%let nobs= %sysfunc(attrn(&rc.,nlobs)); 
%let cl= %sysfunc(close(&rc.)); 
%syscall(set(dataset)); 
%do i=1 %to &nobs; 
%let fetcher= %sysfunc(fetchobs(dataset,&i.)); 
%let macrovar&i.=&variable.; 
%end; 

無論如何,如果你只需要重現此情況下,你可以運行此代碼:

%macro a(); 
%do i=1 %to 120; 
%let macrovar&i.= this_is_the_&i._macrovar; 
%end; 
%windows(); 
%mend a; %a(); 

我用這個示例代碼顯示窗口中充滿了所有的觀察結果:

現在

,用我的電腦有1280×1024的分辨率,顯示正確的窗口,但另一項決議,例如具有1366x768的一臺筆記本電腦,我展示的東西截斷這樣的:

this is the truncated sample

+2

你能寫一個例子%窗口程序有這個問題,也許是一個問題的圖片? – Joe

+0

LINESIZE和PAGESIZE僅用於固定字體列表輸出。您的問題是用戶默認字體大小與其屏幕分辨率之間的交互。 – Tom

+0

@Joe,添加了示例代碼和圖片。謝謝。 – stat

回答

1

數適合窗口的ROWS和COLUMNS取決於使用的字體和終端分辨率。您可以找到/更改與FONT選項一起使用的字體。

%let save=%sysfunc(getoption(font)); 
options font=(Sasfont 8) ; 
%window ... 
... 
options font=&save ; 

但我不知道如何找到窗口或屏幕的大小。我會建議只就適合所有普通用戶的尺寸達成一致。

+0

謝謝湯姆的嘗試,但似乎我已經選擇了最小字體大小(Sasfont 8)。所以這個解決方案對我來說不起作用,我需要一些能夠實際改變終端分辨率的東西,或者根據標準規範來調整輸出窗口。否則,像「算法」那樣,可以使用最小字體(Sasfont 8)推導出哪個是輸出窗口中顯示的最大字符數(按行和列)的數量。 看起來,窗口只是通過拼貼構建而成,但行數和列數隨分辨率而變化。再次感謝。 – stat

+0

我正在將此答案標記爲有用,顯然幫助我們達成了解決方案,非常感謝,但我並未將此標記爲正確,也許這將會有真正的解決方案:) – stat

+0

爲什麼不問問用戶?您可以顯示帶有兩個輸入字段的網格,並要求用戶告訴您他們實際可以看到多少列和行。 – Tom

相關問題