2014-09-29 2 views
0

Мне нужно создать запись нижнего колонтитула, которая отображает точки с запятой, которые равны количеству столбцов в таблице. Таблица содержит 47 столбцов, но это может измениться, поэтому мне нужно динамически подсчитывать столбцы без использования таблиц словарей. Запись нижнего колонтитула будет экспортирована в файл csv, а разделитель - точкой с запятой.Динамически подсчитывать количество столбцов в таблице SAS

Я пробовал этот код ниже, он работает, но при экспорте данных в файл csv точки с запятой заключаются в двойные кавычки, даже если я использовал функцию dequote. Любая идея удалить их? Заранее спасибо.

proc contents data=input out=output noprint; run; 
proc sort data=output; by varnum; run; 
    data _null_; 
    set output; 
    call symputx("maximum",varnum); 
    run; 
    data semis; 
    length ffsemis $47; 
    ffsemis = repeat(';',&maximum*1); 
* call symputx("semis",ffsemis); 
    run; 
    data _null_; 
    file "E:\semis.csv" delimiter=';' dsd dropover; 
    set work.semis; 
    if _n_=1 then do; 
    put ffsemis; 
    end; 
    run; 
+0

В настоящий момент ваша логика основана на количестве переменных в наборе данных, а не на количестве строк. Вы уверены, что хотите, точки с запятой = строки? – user667489

+0

Извините за путаницу, я имел в виду подсчет столбцов или переменных в наборе данных. Да, это требование запроса на изменение. –

+0

Требование к запросу на изменение равно числу точек с запятой, равным количеству столбцов. 47 columns = ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; –

ответ

0

Самый простой способ, с помощью которого можно определить количество переменных в наборе данных SAS, - это содержимое proc.

Создайте новый набор данных с содержимым данных и выполните нулевой шаг данных, чтобы сохранить максимальное число переменных в макропеременной. Имейте в виду, что макро переменные сохраняются как знаковые значения, поэтому вы должны убедиться, что они преобразуются обратно в числовые, выполнив числовую операцию над значением, чтобы использовать новую переменную в виде числа в коде.

proc contents data=input out=output; run; 

proc sort data=output; by varnum; run; 

data _null_; 
    set output; 
    call symputx("maximum",varnum); 
run; 

data semis; 
    length ffsemis $27; 
    ffsemis = repeat(%str(;),&maximum*1); 
    call symputx("semis",ffsemis); 
run; 

%put SEMIS = "&semis."; 

proc export data=semis file="C:\semis.csv"; 
run; 
+0

Привет, Спасибо u за ваш вклад. Я пробовал ваш код, и он работал, чтобы получить максимальное количество столбцов. Но когда я использовал функцию REPEAT для того, чтобы иметь равное количество точек с запятой, она потерпела неудачу, так как функция REPEAT и точка с запятой являются символами. Любое предложение по этому сценарию? Заранее спасибо. –

+0

Я добавил код ниже и, похоже, работает правильно. Одна переменная создается со многими точками с запятой. данные semis; ffsemis = repeat (';', & maximum * 1); run; – JJFord3

+0

Спасибо JJFord3, я попробовал ваш код для экспорта данных в файл csv, а точки с запятой все еще заключены в двойные кавычки. –

Смежные вопросы