2011-05-04 76 views
1

我目前有一個數據集,其中包含我需要的變量以及所需的格式。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()

回答

2

我建議您使用vvalue函數或this question的答案中提供的任何其他技術將格式化的值放到文件中。

+0

感謝您提供其他問題的鏈接。奇怪的是,我在搜索類似的問題時沒有找到那一個。但我認爲'vvalue'函數對我來說不起作用,因爲當我使用'getvarc()'函數從另一個表中檢索參數值時,它需要變量名作爲參數。 現在我嘗試'varfmt()',但是我仍然需要找到一種區分char類型和num類型的方法... – Yoh 2011-05-04 17:58:21

+0

好的,除了以前的評論。我現在嘗試使用varfmt()。我還需要vartype()來選擇類型,然後根據vartype使用getvarc或getvarn,最後使用putn和putc再次將它放入變量。它的工作原理,但我仍然懷疑是否事先做好這件事(如我的第二種選擇)。 – Yoh 2011-05-04 18:59:43

+1

@Yohsoog - 從問題來看,它看起來很喜歡你只是試圖將數據集轉換爲文本文件,同時保留格式。我現在不確定我是否完全理解你正在嘗試做什麼。也許如果你提供了一個小例子 - 以及預期的結果 - 我們可以想出更有用的東西。 – cmjohns 2011-05-04 20:09:39