2010-03-03 77 views
9

Tôi có rất nhiều tệp ở định dạng SAS và tôi muốn có thể đọc chúng trong các chương trình bên ngoài SAS. Tôi không có gì ngoại trừ hệ thống SAS cơ bản được cài đặt. Tôi có thể tự chuyển đổi từng cái một, nhưng tôi muốn một cách để tự động làm điều đó.Tôi làm cách nào để đọc tập dữ liệu SAS?

+0

gì các chương trình/định dạng mà bạn muốn đọc nó trong? Bạn sẽ làm việc với ngôn ngữ lập trình nào? –

+0

Tôi đang sử dụng Python. Tôi đã không chỉ định một chương trình hoặc định dạng vì tôi không muốn giới hạn các câu trả lời; nếu có một cách để đọc dữ liệu thông qua một DLL hoặc một API, tôi chắc chắn rằng tôi có thể tìm ra cách để gọi nó. Nhưng tôi không thể tìm thấy bất kỳ cách nào để làm điều đó, mà không cấp phép các chương trình bổ sung từ SAS. –

+0

Sẽ viết một macro SAS để chuyển đổi mỗi một tính như một giải pháp tự động? –

Trả lời

6

Bạn sẽ cần phải có một phiên chạy SAS để hoạt động như một máy chủ dữ liệu. Sau đó bạn có thể truy cập dữ liệu SAS bằng ODBC, xem SAS ODBC drivers guide.

Để có được địa phương SAS ODBC máy chủ đang chạy, bạn cần phải:

  1. Xác định thiết lập máy chủ SAS ODBC tại được mô tả trong hướng dẫn tài xế SAS ODBC. Trong ví dụ sau, tôi sẽ kết nối với một máy chủ được thiết lập với tên "loclodbc".
  2. Thêm một mục trong tập tin dịch vụ của bạn, (C: \ WINDOWS \ system32 \ drivers \ etc \ dịch vụ), như thế này:

    • loclodbc 9191/tcp

    ... bộ số cổng (ở đây: 9191) để nó khớp với thiết lập cục bộ của bạn. Tên của dịch vụ "loclodbc" phải khớp với tên máy chủ như được định nghĩa trong thiết lập ODBC. Lưu ý rằng thuật ngữ "Máy chủ" không liên quan gì đến tên máy chủ vật lý của máy tính của bạn.

Máy chủ ODBC SAS của bạn hiện đã sẵn sàng để chạy, nhưng không có sẵn tài nguyên dữ liệu được chỉ định. Thông thường, bạn sẽ thiết lập điều này trong tab "Thư viện" trong quá trình thiết lập SAS ODBC, nhưng vì bạn muốn trỏ đến nguồn dữ liệu "khi đang di chuyển", chúng tôi bỏ qua điều này.

Từ ứng dụng khách của bạn, bạn có thể kết nối với máy chủ SAS ODBC, trỏ đến tài nguyên dữ liệu bạn muốn truy cập và tìm nạp dữ liệu.

Cách SAS trỏ tới nguồn dữ liệu thông qua khái niệm "LIBNAME". Một libname là một con trỏ logic tới một tập hợp dữ liệu.

Như vậy

LIBNAME sasadhoc 'C:\sasdatafolder'; 

gán thư mục "C: \ sasdatafolder" tay cầm logic "sasiodat".

Nếu bạn từ bên trong SAS muốn truy cập vào dữ liệu cư trú trong file bảng dữ liệu SAS "C: \ sasdatafolder \ test.sas7bdat", bạn sẽ làm điều gì đó như thế này:

LIBNAME sasadhoc 'C:\sasdatafolder'; 
PROC SQL; 
    CREATE TABLE WORK.test as 
    SELECT * 
    FROM sasadhoc.test 
    ; 
QUIT; 

Vì vậy, những gì chúng ta cần phải làm là nói cho máy chủ SAS ODBC của chúng tôi gán một tên libname cho C: \ sasdatafolder, từ ứng dụng máy khách của chúng tôi. Chúng ta có thể làm điều này bằng cách gửi yêu cầu phân bổ tài nguyên này khi khởi động, bằng cách sử dụng tham số DBCONINIT.

Tôi đã thực hiện một số mã mẫu để thực hiện việc này. Mã mẫu của tôi cũng được viết bằng ngôn ngữ BASE SAS. Vì rõ ràng có nhiều cách thông minh hơn để truy cập dữ liệu SAS, hơn SAS kết nối với SAS thông qua ODBC, mã này chỉ phục vụ như một ví dụ.

Bạn sẽ có thể lấy các bit hữu ích và tạo ra giải pháp của riêng bạn trong các môi trường lập trình bạn đang sử dụng ...

SAS ODBC mẫu kết nối mã:

PROC SQL; 
    CONNECT TO ODBC(DSN=loclodbc DBCONINIT="libname sasadhoc 'c:\sasdatafolder'"); 
    CREATE TABLE temp_sas AS 
    SELECT * FROM CONNECTION TO ODBC(SELECT * FROM sasadhoc.test); 
QUIT; 

Sự kỳ diệu xảy ra trong phần "CONNECT TO ODBC ..." của mã, gán một libname cho thư mục chứa dữ liệu cần thiết.

+0

Thực ra, bạn không cần phiên chạy SAS; trình điều khiển ODBC sẽ tự động khởi chạy trình điều khiển cho bạn. Tuy nhiên, không có cách nào dễ dàng để lập trình cấu hình ODBC, do đó phải được cấu hình thủ công. Đó là một vấn đề, vì bạn không thể tải một tập dữ liệu tùy ý. –

+0

Theo tùy ý, bạn có thể có nghĩa là "nằm ở bất cứ đâu, với bất kỳ tên" ...? Hoặc nó được đưa ra như một tham số? –

+0

Nằm ở bất kỳ đâu, với bất kỳ tên nào. –

2

Tôi nghĩ bạn có thể sử dụng ADO, Xem SAS support site để biết thêm chi tiết.

Disclaimer:

  1. tôi đã không nhìn này trong một thời
  2. Tôi không chắc chắn 100% rằng điều này không yêu cầu bổ sung giấy phép
  3. Tôi không chắc chắn nếu bạn có thể làm điều này bằng cách sử dụng Python
2

Tôi chưa bao giờ thử sử dụng http://www.oview.co.uk/dsread/, nhưng nó có thể là thứ bạn đang tìm kiếm: "một tiện ích dòng lệnh đơn giản để làm việc với tập dữ liệu ở định dạng tệp SAS7BDAT." Nhưng hãy lưu ý "Phần mềm này nên được coi là thử nghiệm và không được đảm bảo là chính xác. Bạn sử dụng nó theo rủi ro của riêng bạn. Nó sẽ chỉ hoạt động trên các tệp SAS7BDAT định dạng Windows không nén bây giờ."

3

Bạn có thể tạo chương trình chuyển đổi SAS thành CSV.

Save the sau trong sas_to_csv.sas:

proc export data=&sysparm 
    outfile=stdout dbms=csv; 
run; 

Sau đó, giả sử bạn muốn truy cập libname.dataset, gọi chương trình này như sau:

sas sas_to_csv -noterminal -sysparm "libname.dataset" 

Các dữ liệu SAS được chuyển đổi sang CSV có thể được đường ống vào Python. Trong Python, nó sẽ đủ dễ dàng để tạo ra các tham số "libname.dataset" theo lập trình.

Các vấn đề liên quan