2012-01-24 36 views
6

Tôi muốn tạo một 'bảng tìm kiếm đẹp' bằng cách sử dụng đầu ra SAS ODS RTF và quy trình PROC REPORT. Sau khi dành cả ngày trên Google tôi đã quản lý để sản xuất như sau:Cách tạo bảng đẹp bằng cách sử dụng BÁO CÁO PROC và đầu ra ODS RTF

Bộ dữ liệu

DATA survey; 
    INPUT id var1 var2 var3 var4 var5 var6 ; 
    DATALINES; 
1 1 35 17 7 2 2 
17 1 50 14 5 5 3 
33 1 45 6 7 2 7 
49 1 24 14 7 5 7 
65 2 52 9 4 7 7 
81 2 44 11 7 7 7 
2 2 34 17 6 5 3 
18 2 40 14 7 5 2 
34 2 47 6 6 5 6 
50 2 35 17 5 7 5 
; 
RUN; 

DATA survey; 
    SET survey; 
    LABEL var1 ='Variable 1'; 
    LABEL var2 ='Fancy variable 2'; 
    LABEL var3 ='Another variable no 3'; 
RUN; 

LIBNAME mylib 'C:\my_libs'; 
RUN; 

PROC FORMAT LIBRARY = mylib.survey; 
    VALUE groups 1 = 'Group A' 
       2 = 'Group B' 
    ; 

OPTIONS FMTSEARCH = (mylib.survey); 

DATA survey; 
    SET survey; 
    FORMAT var1 groups.; 
RUN; 

** Mã để tạo rtf-file **

ods listing close; 
ods escapechar = '^'; 
ods noproctitle; 

options nodate number; 
footnote; 

ODS RTF FILE = 'C:\my_workdir\output.rtf' 
author = 'NN' 
title = 'Table 1 name' 
bodytitle 
startpage = no 
style = journal; 
options papersize = A4 
orientation = landscape; 

title1 /*bold*/ /*italic*/ font = 'Times New Roman' height = 12pt justify = center underlin = 0 color = black bcolor = white 'Table 1 name'; 
footnote1 /*bold*/ /*italic*/ font = 'Times New Roman' height = 9pt justify = center underlin = 0 color = black bcolor = white 'Note: Created on January 2012'; 

PROC REPORT DATA = survey nowindows headline headskip MISSING 
    style(header) = {/*font_weight = bold*/ font_face = 'Times New Roman' font_size = 12pt just = left} 
    style(column) = {font_face = 'Times New Roman' font_size = 12pt just = left /*asis = on*/}; 
    COLUMN var1 var1=var1_n var1=var1_pctn; 
    DEFINE var1/GROUP ORDER=FREQ DESCENDING 'Variable'; 
    DEFINE var1_n/ANALYSIS N 'Data/(N=)'; 
    DEFINE var1_pctn/ANALYSIS PCTN format = percent8. ''; 
RUN; 

ODS RTF CLOSE; 

Điều này tạo ra một bảng RTF trong Word một cái gì đó như sau (một chút đơn giản):

What I get

Tuy nhiên, tôi muốn thêm biến số biến 'Biến 1, n (%)' phía trên các nhóm trong cột tên biến là một hàng riêng biệt (KHÔNG ở hàng tiêu đề). Tôi cũng muốn thêm các biến và thống kê bổ sung trong bảng tổng hợp.

Cuối cùng, tôi muốn cái gì đó trông như thế này:

enter image description here

Tôi đã cố gắng "tất cả mọi thứ" - là có bất cứ ai biết làm thế nào để làm điều này?

+0

nhìn vào tài liệu tuyên bố COLUMN để tạo tiêu đề cột ... nếu bạn gửi một số dữ liệu mẫu sẽ dễ dàng hơn để thử nghiệm các giải pháp –

+0

Cảm ơn lời khuyên của bạn. Tôi đã thêm một tập dữ liệu thử nghiệm và một hình ảnh mới của đầu ra Word. Tôi không chắc chắn rằng các tuyên bố cột là một trong những tôi đang tìm kiếm ... hoặc tôi chỉ không hiểu làm thế nào để sử dụng nó đúng cách. Có lẽ câu hỏi được phần nào được chú ý ở dạng mới – Gordon

Trả lời

5

Tôi biết điều này đã được mở trong một thời gian, nhưng tôi cũng đã đấu tranh với điều này một thời gian, và đây là những gì tôi đã tìm ra. Vì vậy ...

Tóm lại, SAS gặp sự cố khi xuất ra các bảng được định dạng độc đáo có chứa nhiều loại "định dạng" bảng trong đó. Ví dụ, một bảng mà các cột thay đổi giữa chừng (như bạn thường thấy trong "Bảng 1" của một nghiên cứu mô tả dân số nghiên cứu).

Trong trường hợp này, bạn đang cố gắng sử dụng BÁO CÁO PROC, nhưng tôi không nghĩ rằng nó sẽ hoạt động ở đây. Những gì bạn muốn làm là ngăn xếp hai báo cáo khác nhau trên đầu trang của mỗi khác, thực sự. Bạn đang thay đổi giá trị cột giữa chừng và SAS không thực sự hỗ trợ điều đó.

Một số phương pháp thay thế là:

  • Thực hiện tất cả các phép tính của bạn một cách cẩn thận và đầu ra chúng vào một tập dữ liệu trong SAS, ở những vị trí mà bạn muốn. Sau đó, sử dụng PROC PRINT để in chúng. Đây là những gì tôi chỉ có thể mô tả như là một nỗ lực to lớn.

  • Tạo một TAGSET mới cho phép bạn xuất nhiều tệp, nhưng loại bỏ khoảng cách giữa mỗi tệp và căn chỉnh chúng với cùng chiều rộng, tạo một bảng đơn. Điều này cũng khá tốn thời gian; Tôi đã thử nó bằng cách sử dụng HTML với một tập tin CSS tùy chỉnh và tagset, và nó không phải là terribly dễ dàng.

  • Sử dụng quy trình khác (trong trường hợp này là PROC TABULATE) và sau đó xóa thủ công khoảng cách giữa mỗi bảng và fiddle với chiều rộng để có được bảng cuối cùng. Đây không phải là hoàn toàn tự động, nhưng nó có lẽ là lựa chọn nhanh nhất.

XỬ LÝ TRƯỚC là tuyệt vời vì bạn có thể sử dụng nhiều câu lệnh bảng trong một ví dụ. Dưới đây, tôi đặt một số mã trong đó cho thấy những gì tôi đang nói về.

DATA survey; 
    INPUT id grp var1 var2 var3 var4 var5; 
    DATALINES; 
    1 1 35 17 7 2 2 
    17 1 50 14 5 5 3 
    33 1 45 6 7 2 7 
    49 1 24 14 7 5 7 
    65 2 52 9 4 7 7 
    81 2 44 11 7 7 7 
    2 2 34 17 6 5 3 
    18 2 40 14 7 5 2 
    34 2 47 6 6 5 6 
    50 2 35 17 5 7 5 
; 
RUN; 

Tôi thấy mã ví dụ của bạn hơi khó hiểu; var1 trông giống như một biến nhóm, và var2 trông giống như biến phân tích thực tế đầu tiên, vì vậy tôi đã thay đổi một chút mã. Tiếp theo, tôi đã nhanh chóng tạo ra cùng một định dạng mà bạn đã sử dụng trước đó.

PROC FORMAT; 
    VALUE groupft 1 = 'Group A' 2 = 'Group B'; 
RUN; 

DATA survey; 
    SET survey; 
    LABEL var1 ='Variable 1'; 
    LABEL var2 ='Fancy variable 2'; 
    LABEL var3 ='Another variable no 3'; 
    FORMAT var1 groupft.; 
RUN; 

Bây giờ, phần thịt của tuyên bố TẠO LUẬT.

PROC TABULATE DATA=survey; 
    CLASS grp; 
    VAR var1--var5; 
    TABLE MEDIAN QRANGE,var1; 
    TABLE grp,var2*(N PCTN); 
RUN; 

TABULATE về cơ bản hoạt động với dấu phẩy và dấu hoa thị để phân tách mọi thứ. Mặc định cho một cái gì đó giống như grp * var1 là một đầu ra trong đó cột là biến đầu tiên và sau đó có các cột con cho mỗi nhóm con. Để thêm hàng, bạn sử dụng một cột; để chỉ định thống kê nào bạn muốn, bạn thêm từ khóa.

Mã trên sẽ giúp bạn đạt được điều gì đó gần với ví dụ đầu tiên của bạn (không phải định dạng ODS, nhưng tôi cho rằng bạn có thể thêm lại); nó chỉ ở hai bảng khác nhau.

tôi thấy các giấy tờ sau đây hữu ích khi tôi đã giải quyết vấn đề này:

http://www.lexjansen.com/pharmasug/2005/applicationsdevelopment/ad16.pdf

http://www2.sas.com/proceedings/sugi31/089-31.pdf

1

1 ODS có một số tính năng định dạng thú vị (như sắp xếp các con số do đó, một dấu thập phân đi vào cùng một cột) nhưng tính hữu dụng của chúng bị hạn chế đối với các trường hợp phức tạp hơn. Các giải pháp linh hoạt nhất là để tạo ra một chuỗi định dạng bản thân và BÁO CÁO PROC bypass của cơ sở định dạng hoàn toàn, như:

data out; 
    length str $25; 
    set statistics; 
    varnum = 1; 
    group = 1; 
    str = put(median, 3.); 
    output; 
    group = 2; 
    str = put(q1, 3.) || " - " || put(q3, 3.); 
    output; 
run; 

Bạn có thể đặt varnum và nhóm như biến TRÌNH TỰ trong BÁO CÁO PROC và thêm tiêu đề như "biến 1" hoặc " Biến lạ mắt 2 "qua COMPUTE TRƯỚC KHI; ĐƯỜNG DÂY

2 Để giữ thêm BÁO CÁO PROC từ rối tung lên bố trí ở đầu ra ODS RTF, hãy xem xét lại tạo điều kiện cho ASIS lựa chọn phong cách:

define str/"..." style(column) = { asis= on }; 
Các vấn đề liên quan