我目前有一個數據集,其中包含我需要的變量以及所需的格式。SAS數據集字段類型數字用當前格式字符化
現在我在循環中使用getvarc()
函數(以及其他函數)來獲取這些變量以寫入文件。
發生的第一個問題是某些變量不是字符類型,而是數字類型。我可以使用getvarn()
來檢索那些,但然後格式浪費,我真的需要。
E.g.日期類型:18750. Format = yymmdd10。因此看起來像2011-05-03
使用value=getvarn()
該字段,它將檢索18750
的值。如果我然後想輸出(使用PUT)這個值,它不會給我2011-05-03
日期,因爲我想要的。
所以現在我正在尋找一個更好的方法來做到這一點。
我的第一個選擇是使用sashelp.vcolumn數據集來檢索該字段的格式,並在put語句中使用它以正確的格式輸出。
我的第二個選擇是轉換包含此字段的數據集(實際上它是關於多個數據集),其中我將所有的num類型字段轉換爲保留正確格式的字符類型。
我應該選擇哪個選項?
而在第二種選擇的情況下,這是否可以通用的方式完成(正如我所說的,這不只是關於一個變量)?
編輯:
Cmjohn的答案後,我必須找到一種方式來解決我的問題。不使用sashelp.vcolumn,但使用varfmt
函數。 所以我在我的代碼,在做一個簡短的說明:
data _null_
set dataset1;
file file1;
if somefield = x then do;
dsid = open(datasetfield, i);
rc = fetchobs (dsid);
varnum = varnum(dsid,anotherfield);
**varfmt = varfmt(dsid,anotherfield);
if vartype(dsid,anotherfield) = 'N' then do;**
value = getvarn(dsid,varnum);
**value_formatted = putn(value,varfmt);**
**end;
else do;**
value = getvarc(dsid,varnum);
**value_formatted = putc(value,varfmt);
end;**
put value_formatted;
end;
run;
因此,這是一般的(快速從我的頭),我現在所做的。解決方案的大膽部分是我在Cmjohns響應後提出的。所以我的第一個問題是回答'怎麼做?'。
但我的問題補充:會是怎樣最有效的,從長遠來看:保持這個過程或使我的數據集的所有數據只能由使用getvarc
沒有類型檢查的需要,可以讀取的方式getfmt()
?
感謝您提供其他問題的鏈接。奇怪的是,我在搜索類似的問題時沒有找到那一個。但我認爲'vvalue'函數對我來說不起作用,因爲當我使用'getvarc()'函數從另一個表中檢索參數值時,它需要變量名作爲參數。 現在我嘗試'varfmt()',但是我仍然需要找到一種區分char類型和num類型的方法... – Yoh 2011-05-04 17:58:21
好的,除了以前的評論。我現在嘗試使用varfmt()。我還需要vartype()來選擇類型,然後根據vartype使用getvarc或getvarn,最後使用putn和putc再次將它放入變量。它的工作原理,但我仍然懷疑是否事先做好這件事(如我的第二種選擇)。 – Yoh 2011-05-04 18:59:43
@Yohsoog - 從問題來看,它看起來很喜歡你只是試圖將數據集轉換爲文本文件,同時保留格式。我現在不確定我是否完全理解你正在嘗試做什麼。也許如果你提供了一個小例子 - 以及預期的結果 - 我們可以想出更有用的東西。 – cmjohns 2011-05-04 20:09:39