2015-08-17 103 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

相关问题