我有一個輸出表,其中包含來自30個不同表格的300多個變量,這些表格由UNION連接,用於建模。我創建了一個宏,它使用這個輸出表創建一個包含許多統計數據的報告,例如平均值,最小值/最大值等。我試圖在報告中添加一列,詳細說明變量來自哪個表。我說表中的一些變量是在不同的表中共享的。我希望避免在報告中多次使用相同的變量,因爲統計數據是相同的,無論變量來自哪個表。有沒有一種有效的方法來做到這一點?SAS-在報告中添加原始表名稱作爲列
-1
A
回答
0
如果是我,我會遍歷union
數據集中的每一個,並將表名稱和變量名稱放入已編譯的數據集中。您可能在宏列表中或者輸入了所有表名,因此您只需添加幾行代碼即可在每個表上運行proc contents
以編譯完整的表和變量名稱列表。需要注意的是喜歡你的例子,會有表編譯後,您可以修改重複的變量名:不是UNION的
** create different tables **;
data height; set sashelp.class(keep=name height); run;
data weight; set sashelp.class(keep=name weight); run;
data sex; set sashelp.class(keep=name sex); run;
** put your datasets into a list either manually or dynamically **;
/* manually */
%let ds_list=height weight sex;
/* dynamically -- be careful to include only tables in your union */
proc sql noprint;
select MEMNAME
into: ds_list separated by " "
from sashelp.vmember
where libname = "WORK" and memname not in ("SASMACR","FORMATS");
quit;
%put &ds_list.;
** loop over each table to put the table name and variables in a dataset **;
%MACRO get_names(ds_list);
%do i=1 %to %sysfunc(countw(&ds_list.));
%let ds = %scan(&ds_list.,&i.);
proc contents data = &ds. noprint
out=names_&ds.(keep=MEMNAME NAME rename=(MEMNAME=SOURCE_DATASET));
run;
proc append data = names_&ds. base=full force; run;
%end;
%MEND;
%get_names(&ds_list.);
0
考慮使用數據步驟,然後使用INDSNAME
選項,而不是。
data want;
set sashelp.class sashelp.cars indsname=source;
source_dataset = source;
run;
0
我能夠做到這一點使用如下:
與源表中創建表。
PROC SQL;
CREATE TABLE SOURCES AS
SELECT NAME
,MEMNAME
FROM DICTIONARY.COLUMNS
WHERE LIBNAME='LIBNAME'
ORDER BY 1,2;
RUN;
加入我的統計表。
PROC SQL;
CREATE TABLE STATS_NEW AS
SELECT memname AS TABLE_NAME,a.*
FROM STATS a
LEFT JOIN SOURCES b
ON a.name = b.name
GROUP BY a.name
ORDER BY a.name;
QUIT;
轉置數據並添加逗號分隔符。
DATA STATS_TRANSPOSE (drop=TABLE_NAME);
LENGTH INPUT_TABLES $1000;
SET STATS_NEW;
BY name;
RETAIN INPUT_TABLES;
IF FIRST.name THEN DO; INPUT_TABLES=TABLE_NAME; END;
IF NOT FIRST.name
THEN DO;
INPUT_TABLES=CATS(INPUT_TABLES,', ',TABLE_NAME);
END;
IF LAST.name THEN DO;
IF name IN ('FIELD1','FIELD2')
THEN DO; INPUT_TABLES='ALL'; END;
OUTPUT;
END;
RUN;
相關問題
- 1. 在晶體報告交叉表報告中添加序列號
- 2. PHP csv報告添加列名
- 3. sas爲列名添加前綴
- 4. 在列表中添加二維名稱
- 5. WooCommerce在列表中添加類名稱
- 6. 添加列表標題到cognos報告工作室列表
- 7. JMeter APDEX報告爲原始CSV
- 8. 產品列表名稱參數未出現在報告中
- 9. 如何將數據集的名稱作爲SAS列中的列
- 10. Google AnalyticsBatchGet報告|報告名稱
- 11. 將列名添加到名列表中,在列表中沒有丟失名稱
- 12. 在SAS中使用數字列名稱
- 13. 在SAS中添加變量名稱中的日期
- 14. 在SSRS中設置報告名稱 - 導出報告
- 15. 如何在每個報告中打印報告對象名稱?
- 16. Google Analytics代碼始終將網頁名稱報告爲「$ A」
- 17. SAS安全列名稱
- 18. 按原始順序顯示列名稱?
- 19. 報告服務 - 從舊報告名稱確定報告GUID
- 20. 在Android中向列表視圖列添加列名稱
- 21. 如何在報告中製作一列所有已檢查列的名稱?
- 22. 在樂譜呼叫中添加列表名稱作爲劇情標題R
- 23. 如何在使用PDO時獲取原始表格/列名稱?
- 24. BI Publisher報告名稱
- 25. SSRS Report Manager報告名稱
- 26. 在SAS中生成報告的宏
- 27. 「年」作爲MySQL表中的列名稱
- 28. 用原始文件在列表視圖中添加imageview
- 29. SAS:添加if列
- 30. 動態地將報告作爲子報告添加到BIRT中的主報告中
您可能需要更具體才能在此處獲得答案。如果您想知道OBSERVATION來自哪個數據集,則使用數據步驟合併記錄,並在SET語句中使用INDSNAME =選項。無論如何,使用SET語句的數據步驟可能比使用帶有UNION的SQL更好。 – Tom
請提供一些示例數據,顯示您正在嘗試做什麼。 – Joe